Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit a4f569736a8c49e998e854efa9d8b0912959ee3d


Parents : b4373d1
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-05-02T09:59:04-05:00

fix(locales): improve translations for process log messages and UI descriptions across multiple languages

Changes
Diff

diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index b205dfbe..84d0459e 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -48,7 +48,7 @@
"view_process_log": "Prozesslog (Debug)",
"process_log_title": "Bot-Prozesslog",
"process_log_empty": "Noch keine Logausgabe für diesen Bot.",
- "process_log_truncated": "Es wird nur das Ende des Logs angezeigt; die Datei auf der Festplatte ist größer.",
+ "process_log_truncated": "Es wird nur das Ende des Logs angezeigt. Die Datei auf der Festplatte ist größer.",
"process_log_loading": "Log wird geladen…",
"process_log_failed": "Prozesslog konnte nicht geladen werden",
"process_log_copied": "Log in die Zwischenablage kopiert",
@@ -105,9 +105,9 @@
"messages_sidebar_position_left": "Links",
"messages_sidebar_position_right": "Rechts",
"ui_transparency": "Hintergrundtransparenz",
- "ui_transparency_description": "Erhöht die Durchsichtigkeit des Haupt-Hintergrunds. Seitenleisten bleiben deckend.",
+ "ui_transparency_description": "Erhöht die Transparenz des Haupt-Hintergrunds. Seitenleisten bleiben für bessere Lesbarkeit undurchsichtig.",
"ui_glass_enabled": "Glaseffekt",
- "ui_glass_enabled_description": "Milchglas-Unschärfe bei Glaskarten. Aus: undurchsichtige Flächen.",
+ "ui_glass_enabled_description": "Fügt Karten einen Milchglas-Effekt hinzu. Wenn deaktiviert, verwenden Karten solide Farben.",
"reset_appearance_defaults": "Erscheinungsbild auf Standard zurücksetzen",
"light_theme": "Helles Thema",
"dark_theme": "Dunkles Thema",
@@ -119,12 +119,12 @@
"transport_toggle_description": "Ankündigungen weiterleiten, auf Pfadanfragen antworten und helfen, dass Ihr Mesh online bleibt.",
"requires_restart": "Erfordert einen Neustart nach dem Umschalten.",
"show_community_interfaces": "Community-Schnittstellen anzeigen",
- "community_interfaces_description": "Community-gepflegte Voreinstellungen beim Hinzufügen neuer Schnittstellen anzeigen.",
+ "community_interfaces_description": "Zeigt von der Community gepflegte Vorlagen beim Hinzufügen neuer Schnittstellen an.",
"reliability": "Zuverlässigkeit",
"lxmf_settings_eyebrow": "LXMF",
"privacy_eyebrow": "Datenschutz",
"privacy_data_title": "Daten & Gerät",
- "privacy_data_description": "Lokale Nachrichtenhistorie, Telemetrie für vertrauenswürdige Peers. Löschen betrifft nur dieses Gerät.",
+ "privacy_data_description": "Verwalten Sie den lokalen Nachrichtenverlauf, Telemetrie und andere Datenschutzoptionen. Das Löschen hier betrifft nur dieses Gerät.",
"privacy_data": "Daten & Gerät",
"privacy_subsection_device": "Dieses Gerät",
"privacy_subsection_telemetry": "Mesh-Telemetrie",
@@ -137,11 +137,11 @@
"auto_fallback_title": "Automatisch auf Propagationsknoten ausweichen",
"auto_fallback_description": "Fehlgeschlagene direkte Zustellungen werden in Ihrem bevorzugten Propagationsknoten eingereiht.",
"inbound_stamps_required_title": "Eingehende Stempel verlangen",
- "inbound_stamps_required_description": "Wenn aus, sind für direkte LXMF-Nachrichten an Sie keine Proof-of-Work-Stempel nötig. Wenn an, Stempelkosten unten einstellen (höher = mehr Aufwand für Sender).",
+ "inbound_stamps_required_description": "Wenn deaktiviert, erfordern direkte Nachrichten an Sie keine Proof-of-Work-Stempel. Wenn aktiviert, legen Sie die Stempelkosten unten fest. Höhere Werte bedeuten mehr Arbeit für die Absender.",
"inbound_stamp_cost": "Kosten für eingehende Nachrichtenstempel",
- "inbound_stamp_description": "Proof-of-Work-Schwierigkeit für Direktzustellung, wenn eingehende Stempel aktiv sind. Bereich: 1-254. Standard: 8.",
+ "inbound_stamp_description": "Proof-of-Work-Schwierigkeit für direkte Nachrichten. Bereich: 1-254. Standard: 8.",
"local_message_auto_delete_title": "Alte Nachrichten auf diesem Gerät löschen",
- "local_message_auto_delete_description": "Entfernt Nachrichten aus der lokalen Datenbank nach dem eingestellten Alter. Gilt nur für dieses Gerät. Andere haben weiterhin ihre eigenen Kopien. Es wird kein Löschbefehl ins Netz gesendet.",
+ "local_message_auto_delete_description": "Entfernt Nachrichten aus der lokalen Datenbank nach der von Ihnen festgelegten Zeit. Dies betrifft nur dieses Gerät und es werden keine Daten aus dem Netzwerk gelöscht.",
"local_message_auto_delete_age": "Nachrichten löschen, die älter sind als",
"local_message_auto_delete_unit_aria": "Zeiteinheit für die Aufbewahrung",
"local_message_auto_delete_unit_days": "Tage",
@@ -175,7 +175,7 @@
"last_synced": "Zuletzt synchronisiert vor {time}.",
"last_synced_never": "Zuletzt synchronisiert: Nie.",
"propagation_stamp_cost": "Kosten für Propagationsknotenstempel",
- "propagation_stamp_description": "Erfordern Sie Proof-of-Work-Stempel für über Ihren Knoten verbreitete Nachrichten. Höhere Werte erfordern mehr Rechenaufwand. Bereich: 13-254. Standard: 16. **Hinweis:** Eine Änderung erfordert den Neustart der App.",
+ "propagation_stamp_description": "Erfordert Proof-of-Work-Stempel für Nachrichten, die über Ihren Knoten gesendet werden. Höhere Werte erfordern mehr Arbeit. Bereich: 13-254. Standard: 16. **Hinweis:** Eine Änderung erfordert einen Neustart.",
"language": "Sprache",
"select_language": "Wählen Sie Ihre bevorzugte Sprache.",
"tagline": "All-in-One-Reticulum-Client",
@@ -219,9 +219,9 @@
"message_font_size": "Nachrichtenschriftgröße",
"message_icon_size": "Symbolgröße",
"detailed_outbound_send_status": "Detaillierter Sendestatus (ausgehend)",
- "detailed_outbound_send_status_description": "Pfadfindung, Spinner und technische Tooltips beim Senden anzeigen. Wenn aus, erscheint ein einzelnes halbtransparentes Häkchen, bis es nach einigen Sekunden eskaliert.",
+ "detailed_outbound_send_status_description": "Zeigt während des Sendens einen detaillierten Status wie Pfadsuche und technische Tooltips an. Wenn deaktiviert, wird ein einfaches Häkchen angezeigt.",
"message_timestamp_grouping": "Nachrichten-Zeitstempel gruppieren",
- "message_timestamp_grouping_description": "Wenn aktiv, zeigt der Chat Datumsüberschriften und bündelt Zeitstempel pro Lauf auf einer Blase. Wenn aus, zeigt jede Nachricht die Uhrzeit und Datumsblasen werden ausgeblendet.",
+ "message_timestamp_grouping_description": "Wenn aktiviert, werden Nachrichten nach Datum gruppiert und Zeitstempel vereinfacht. Wenn deaktiviert, zeigt jede Nachricht ihre genaue Zeit an.",
"community_interfaces": "Community-Schnittstellen",
"preferred_node": "Bevorzugter Knoten",
"local_node": "Lokaler Knoten",
@@ -234,9 +234,9 @@
"stranger_protection": "Fremdenschutz",
"stranger_protection_description": "Steuern Sie, wie die App Nachrichten und Anhänge von unbekannten Peers behandelt.",
"block_stranger_attachments": "Anhänge von Fremden blockieren",
- "block_stranger_attachments_description": "Datei-, Bild- und Audioanhänge von Peers, die nicht in Ihren Kontakten sind, automatisch entfernen. Textnachrichten werden weiterhin zugestellt.",
+ "block_stranger_attachments_description": "Entfernt automatisch Datei-, Bild- und Audioanhänge von Personen, die nicht in Ihren Kontakten sind. Textnachrichten werden weiterhin zugestellt.",
"block_all_from_strangers": "Alles von Fremden blockieren",
- "block_all_from_strangers_description": "Alle Nachrichten, Anhänge und Anrufe von Peers, die nicht in Ihren Kontakten sind, stillschweigend verwerfen. Nichts wird zugestellt oder gespeichert.",
+ "block_all_from_strangers_description": "Ignoriert alle Nachrichten, Anhänge und Anrufe von Personen, die nicht in Ihren Kontakten sind. Nichts wird zugestellt oder gespeichert.",
"show_unknown_contact_banner": "Hinweis für unbekannte Kontakte anzeigen",
"show_unknown_contact_banner_description": "Wenn aktiviert, erscheint oben in Unterhaltungen mit Peers, die nicht in Ihren Kontakten sind, ein Hinweis.",
"warn_on_stranger_links": "Vor Links von Fremden warnen",
@@ -252,7 +252,7 @@
"desktop_open_calls_in_separate_window": "Anrufe in separatem Fenster öffnen",
"desktop_open_calls_in_separate_window_description": "Wenn ein Anruf aktiv ist, wird er in einem separaten Pop-out-Fenster anstatt in der App angezeigt.",
"desktop_hardware_acceleration_enabled": "Hardware-Beschleunigung",
- "desktop_hardware_acceleration_enabled_description": "Deaktivieren Sie dies, wenn Sie UI-Flackern, schwarze Bildschirme oder grafische Fehler bemerken.",
+ "desktop_hardware_acceleration_enabled_description": "Deaktivieren Sie dies, wenn UI-Flackern, schwarze Bildschirme oder andere grafische Probleme auftreten.",
"translator": "Übersetzer",
"translator_enabled": "Übersetzer aktivieren",
"translator_description": "Übersetzungsfunktionen in Gesprächen aktivieren.",
@@ -300,9 +300,9 @@
"blackhole_integration_enabled": "Blackhole-Integration",
"blackhole_integration_description": "Identitäten automatisch auf der Reticulum-Transportebene sperren (Blackhole), wenn Benutzer in MeshChatX verbannt werden.",
"announce_limits": "Ankündigungslimits",
- "announce_limits_description": "Begrenzt gespeicherte Ankündigungen pro Aspekt (älteste werden entfernt) und wie viele pro API-Anfrage geladen werden. Begrenzt auch Suche und erkannte Schnittstellen. Feld leeren und speichern setzt Standardwerte.",
+ "announce_limits_description": "Begrenzen Sie, wie viele Ankündigungen in der Datenbank gespeichert und wie viele gleichzeitig geladen werden. Löschen Sie ein Feld und speichern Sie, um die Standardwerte wiederherzustellen.",
"announce_store_heading": "Eingehende Ankündigungen speichern",
- "announce_store_description": "Wenn aus, werden empfangene Ankündigungen dieses Typs nicht in der Datenbank gespeichert. Deaktivieren betrifft nur die Speicherung, nicht das Netz oder eigene Ankündigungen. Ein lokal betriebener NomadNet-Page-Node erscheint weiter in der Liste, selbst wenn NomadNet-Speicher aus ist.",
+ "announce_store_description": "Wenn aus, werden empfangene Ankündigungen dieses Typs nicht gespeichert. Dies betrifft nur die Speicherung und stoppt nicht das Netzwerk oder eigene Ankündigungen. Ihr lokaler NomadNet-Knoten wird weiterhin gelistet.",
"announce_store_lxmf": "LXMF (lxmf.delivery)",
"announce_store_lxst": "LXST Telefonie (lxst.telephony)",
"announce_store_nomad": "NomadNet-Knoten (nomadnetwork.node)",
@@ -325,7 +325,7 @@
"search_settings": "Einstellungen suchen...",
"show_qr": "QR-Code anzeigen",
"csp_settings": "Content-Security-Policy (CSP)",
- "csp_description": "Fügen Sie manuell erlaubte Domains und Quellen für verschiedene Ressourcentypen hinzu. Dies ist nützlich für benutzerdefinierte Kachelserver, Bots oder externe Integrationen.",
+ "csp_description": "Fügen Sie manuell erlaubte Domänen für verschiedene Ressourcen hinzu. Dies ist nützlich für eigene Kartenserver, Bots oder externe Integrationen.",
"csp_extra_connect_src": "Zusätzliche Connect-Quellen",
"csp_extra_connect_src_description": "Zusätzliche Quellen für fetch/Websocket-Verbindungen (z. B. https://api.example.com).",
"csp_extra_img_src": "Zusätzliche Bildquellen",
@@ -346,7 +346,7 @@
"location_manual_lon": "Längengrad",
"location_manual_alt": "Höhe (m)",
"telemetry_enabled": "Telemetrie aktiviert",
- "telemetry_description": "Erlauben Sie MeshChatX das Senden und Empfangen von Telemetriedaten. Dies beinhaltet die Beantwortung von Standortanfragen von vertrauenswürdigen Peers.",
+ "telemetry_description": "Erlaubt MeshChatX das Senden und Empfangen von Telemetriedaten, wie z. B. das Beantworten von Standortanfragen vertrauenswürdiger Kontakte.",
"telemetry_trusted_peers": "Vertrauenswürdige Telemetrie-Peers",
"telemetry_no_trusted_peers": "Keine vertrauenswürdigen Peers konfiguriert. Vertrauen Sie Peers aus dem Chat-Menü, um ihnen zu erlauben, Ihren Standort abzufragen.",
"telemetry_revoke_trust": "Vertrauen entziehen",
@@ -397,7 +397,7 @@
},
"stickers": {
"settings_title": "Sticker",
- "settings_description": "Gespeicherte Bilder für diese Identität. Im Composer nutzen oder aus Chats speichern. JSON-Backup exportieren oder importieren.",
+ "settings_description": "Ihre gespeicherten Bilder für diese Identität. Verwenden Sie diese in Nachrichten oder speichern Sie Bilder aus Chats. Sie können auch ein Backup exportieren oder importieren.",
"export": "Sticker exportieren",
"import": "Sticker importieren",
"export_done": "Sticker exportiert",
@@ -511,7 +511,7 @@
"title": "Sticker-Editor",
"create_button": "Sticker erstellen",
"processing": "Wird verarbeitet...",
- "canvas_hint": "Vorschau ist skaliert; der Export nutzt eine 512×512-Leinwand.",
+ "canvas_hint": "Die Vorschau ist skaliert. Der Export nutzt eine 512×512-Leinwand.",
"section_source": "Quelle",
"choose_image": "Bild wählen",
"section_transform": "Transformation",
@@ -581,7 +581,7 @@
},
"gifs": {
"settings_title": "GIFs",
- "settings_description": "Ihre persönliche GIF-Sammlung für diese Identität. GIF- und animierte WebP-Dateien hochladen und schnell in Chats wiederverwenden. Häufig genutzte GIFs werden zuerst angezeigt.",
+ "settings_description": "Ihre persönliche GIF-Bibliothek. Laden Sie GIF- und animierte WebP-Dateien hoch, um sie in Chats wiederzuverwenden. Ihre am häufigsten verwendeten GIFs werden zuerst angezeigt.",
"export": "GIFs exportieren",
"import": "GIFs importieren",
"export_done": "GIFs exportiert",
@@ -920,7 +920,7 @@
"backbone_transport_identity_placeholder": "e53433e51cde34c42a3245ba3fe1ad69",
"backbone_transport_identity_hint": "Entspricht Reticulum-Backbone-Fernbeispielen nur mit remote und target_port. Hash verwenden, wenn Betreiber oder Verzeichnis ihn angeben.",
"loopback_local_title": "Lokal / Loopback",
- "loopback_local_body": "Reticulum nutzt intern LocalClientInterface f\u00fcr die Shared Instance; es gibt kein separates Loopback-Formular wie TCP Client. Um einen anderen RNS-Prozess auf diesem Host zu erreichen, TCP Client auf 127.0.0.1 und den Instanz-Port verwenden oder ein externes Interface-Modul (z. B. MyInterface.py) unter interfacepath installieren.",
+ "loopback_local_body": "Reticulum nutzt intern eine geteilte Instanz. Um einen anderen RNS-Prozess auf diesem Host zu erreichen, verwenden Sie einen TCP-Client auf 127.0.0.1 mit dem Instanz-Port oder ein externes Interface-Modul.",
"loopback_local_docs_hint": "Siehe Kapitel Interfaces f\u00fcr unterst\u00fctzte Typen.",
"loopback_local_docs_link": "Geb\u00fcndeltes Reticulum-Handbuch \u00f6ffnen",
"custom_external_intro": "Typen wie WeaveInterface oder eigene Klassen werden geladen, wenn Reticulum eine passende Moduldatei (TypeName.py) unter interfacepath mit interface_class findet (externer Loader in RNS). JSON-Optionen werden in den Interface-Abschnitt Ihrer Konfiguration \u00fcbernommen.",
@@ -965,12 +965,12 @@
"discovered_no_config": "Diese Ankündigung enthielt keinen einsatzbereiten Konfigurationsblock.",
"discovered_prefill_applied": "Felder aus dem entdeckten Interface vorausgefüllt.",
"rnode_ble_toggle": "Bluetooth LE (RNode UART)",
- "rnode_ble_hint": "Reticulum nutzt BLE über bleak auf dem Gerät, auf dem MeshChatX läuft. RNode zuerst im Betriebssystem koppeln oder verbinden. Reine Browser- oder Remote-UI kann kein BLE an Reticulum durchreichen; Electron, Linux, macOS, Windows oder die Android-App verwenden, wo eingebettetes Python bleak enthält. Unter Android gelten weiterhin normale Kopplung, Hardwareunterstützung und Berechtigungsabfragen.",
+ "rnode_ble_hint": "Reticulum nutzt Bluetooth auf diesem Gerät. Koppeln Sie den RNode zuerst in den Betriebssystem-Einstellungen. Dies erfordert die Desktop- oder Android-App. Unter Android müssen Sie zudem die erforderlichen Berechtigungen erteilen.",
"rnode_ble_peer_label": "BLE-Name oder MAC",
"rnode_ble_peer_placeholder": "MyRNode oder aa:bb:cc:dd:ee:ff",
"rnode_ble_peer_required": "Anzeigenamen oder MAC-Adresse des RNode eingeben.",
"rnode_ip_host_label": "Hostname oder IP-Adresse",
- "rnode_tcp_port_fixed_hint": "Reticulum nutzt TCP-Port 7633 auf dem RNode; nur Hostname oder IP eingeben (kein :Port).",
+ "rnode_tcp_port_fixed_hint": "Reticulum nutzt Port 7633 auf dem RNode. Geben Sie nur den Hostnamen oder die IP ohne Port ein.",
"rnode_tcp_host_required": "Hostname oder IP für RNode über TCP eingeben.",
"listen_ip_required": "Listen-IP ist erforderlich.",
"kernel_iface_picker_title": "Schnittstellen auf diesem Rechner",
@@ -1115,7 +1115,7 @@
"export_region_oceania": "Oceania",
"vector_exchange_title": "GeoJSON / KML / KMZ",
"vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
- "vector_exchange_hint": "Imports support icons via mcx_icon_href, mcx_icon_data_url (data URIs), Mapbox simplestyle marker-color, and KML/KMZ IconStyle. KMZ packs KML with embedded images. Name, description, and extra properties import/export with GeoJSON and KML; select a drawing to see metadata above it.",
+ "vector_exchange_hint": "Importe unterstützen Icons aus verschiedenen Formaten wie GeoJSON und KML. Wählen Sie eine Zeichnung aus, um deren Metadaten zu sehen.",
"vector_import_geojson": "Import GeoJSON",
"vector_import_kml": "Import KML",
"vector_import_kmz": "Import KMZ",
@@ -1261,7 +1261,7 @@
"raw_path_value_unknown": "Unbekannt",
"raw_path_finding_measure": "Pfadsuche beim Senden (ausgehend)",
"raw_path_row_hash_rnpath": "Pfadtabelle-Hash (rnpath)",
- "raw_path_row_hash_rnpath_hint": "Entspricht dem Ziel-Hash, den Reticulum für diese Route verwendet; in der rnpath-Pfadtabelle suchen.",
+ "raw_path_row_hash_rnpath_hint": "Der Ziel-Hash, den Reticulum für diese Route verwendet hat. Sie finden ihn in der Pfadtabelle.",
"copy_message": "Nachricht kopieren",
"message_copied": "Nachricht kopiert",
"failed_copy_message": "Nachricht konnte nicht kopiert werden",
@@ -1353,7 +1353,7 @@
"forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
"forward_verify_show": "Source and verification",
"forward_verify_hide": "Hide verification",
- "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_explanation": "Paper LXMF-Links funktionieren nur, wenn die vollständige Nachricht verfügbar ist und in die Paper-Limits passt. Zitierte Ausschnitte können gefälscht sein.",
"forward_verify_loading": "Looking up verification URI…",
"forward_verify_open_uri": "Open verification URI",
"forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
@@ -1427,10 +1427,11 @@
"renderer_chip_micron_wasm": "Micron WASM",
"renderer_hint_micron_js": "micron-parser (JavaScript)",
"renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
- "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_hint_micron_wasm_pending": "Schnellere Version lädt oder ist nicht verfügbar. Die Standardversion wird verwendet.",
"renderer_popover_micron_wasm_powered": "Basierend auf ",
"renderer_popover_micron_wasm_active_tail": " {version}. WebAssembly-Renderer.",
- "renderer_popover_micron_wasm_pending_tail": " {version} ist nicht verfügbar oder lädt noch; es wird micron-parser (JavaScript) verwendet.",
+ "renderer_popover_micron_wasm_pending_tail": " {version} lädt oder ist nicht verfügbar. Die Standardversion wird verwendet.",
+ "renderer_switch_title": "Parser",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
"renderer_chip_plaintext": "Text",
@@ -1522,7 +1523,7 @@
"licenses": {
"section_label": "Rechtliches",
"title": "Lizenzen Dritter",
- "description": "Versionen, Autoren und SPDX- oder deklarierte Lizenzangaben zur Laufzeit. Daten stammen aus der installierten Python-Umgebung. Frontend-Daten nutzen pnpm, falls es funktioniert; sonst werden Pakete aus node_modules gelesen (z. B. wenn pnpm licenses an der Lockfile scheitert).",
+ "description": "Versionen, Autoren und SPDX- oder deklarierte Lizenzangaben zur Laufzeit. Daten stammen aus der installierten Python-Umgebung. Frontend-Daten nutzen pnpm, falls es funktioniert. Sonst werden Pakete aus node_modules gelesen (z. B. wenn pnpm licenses an der Lockfile scheitert).",
"short_description": "Versionen, Autoren und Lizenzen für Backend und Frontend.",
"search_placeholder": "Pakete, Versionen, Autoren, Lizenzen suchen...",
"generated_at": "Erstellt um {time}",
@@ -1614,7 +1615,7 @@
"move_down": "Nach unten",
"remove_rule": "Regel entfernen",
"terms_label": "Begriffe oder Muster",
- "terms_placeholder": "Eine Zeile pro Eintrag oder kommagetrennt. Teilstrings ohne Groß/Klein. Regex: ein Muster pro Zeile; ungültige Muster werden beim Speichern entfernt.",
+ "terms_placeholder": "Einer pro Zeile oder durch Kommas getrennt. Die Suche unterscheidet nicht zwischen Groß- und Kleinschreibung. Sie können auch reguläre Ausdrücke verwenden (einer pro Zeile).",
"match_targets_label": "Abgleich in",
"match_peer_fields": "Peer-Anzeigename, eigener Name, Kontaktfelder",
"match_message": "Nachrichtentitel und -inhalt (wenn vorhanden)",
@@ -1657,7 +1658,7 @@
"repository_server": {
"title": "Repository-Server",
"description": "Verteilen Sie MeshChatX- und Reticulum-bezogene Python-Wheels sowie eigene Dateien über einfaches HTTP, damit andere im Netz oder auf diesem Gerät sie herunterladen können.",
- "subtitle": "Mit Netz: gebündelte Wheel-Sammlung aktualisieren; eigene Dateien jederzeit hinzufügen; kleine Download-Seite in der App starten oder den separaten HTTP-Helfer nutzen.",
+ "subtitle": "Aktualisieren Sie die enthaltenen Softwarepakete, fügen Sie eigene Dateien hinzu oder starten Sie eine Download-Seite für andere Geräte.",
"back_tools": "Back to tools",
"http_heading": "Plain HTTP mirror",
"host_label": "Listen address",
@@ -1851,14 +1852,14 @@
"serial": {
"title": "USB serial is unavailable",
"polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
- "android_webview_no_serial": "Android WebView does not expose Web Serial; use the desktop browser or wait for the bundled flasher.",
+ "android_webview_no_serial": "Android unterstützt Web Serial in dieser Ansicht nicht. Verwenden Sie einen Desktop-Browser oder den integrierten Flasher.",
"browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
"android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
"unknown": "USB serial cannot be initialised in this environment."
},
"bluetooth": {
"title": "Bluetooth is unavailable",
- "android_bridge_not_implemented": "Web Bluetooth is unavailable in this WebView; use Bluetooth from the OS or a different browser.",
+ "android_bridge_not_implemented": "Web Bluetooth ist hier nicht verfügbar. Verwenden Sie die Bluetooth-Einstellungen des Systems oder einen anderen Browser.",
"browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
"insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
"requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
@@ -2045,7 +2046,7 @@
"heard_title_short": "RNGit · {prefix}",
"unnamed_node": "RNGit-Knoten",
"hops_label": "Hops: {n}",
- "intro": "RNGit hat keinen globalen Index: Kandidaten-Repositorynamen einfügen (einer pro Zeile). MeshChatX versucht für jedes eine entfernte Ref-Liste; erreichbare Repos zeigen eine git clone-Zeile zum Kopieren. Die App hostet oder lädt keine Git-Daten.",
+ "intro": "Fügen Sie Repository-Namen ein (einer pro Zeile), um sie im Netzwerk zu finden. Erreichbare Repos zeigen einen Klon-Befehl zum Kopieren. Diese App speichert keine Git-Daten.",
"destination_hash": "RNGit-Ziel-Hash (32 Hex)",
"group_name": "Gruppe (rngit-Konfiguration)",
"repo_names_label": "Zu prüfende Repositorynamen",
@@ -2065,7 +2066,7 @@
"copy_failed": "Kopieren fehlgeschlagen",
"refs_preview": "Refs (Vorschau)",
"truncated": "(gekürzt)",
- "no_clone_hint": "Keine Klon-Zeile für nicht erreichbare Namen; Zugriff oder Schreibweise auf dem rngit-Server prüfen.",
+ "no_clone_hint": "Kein Klon-Befehl für nicht erreichbare Namen verfügbar. Prüfen Sie den Namen oder Ihre Verbindung.",
"experimental_footer": "Experimentell: RNGit-Werkzeuge können sich ohne Vorankündigung ändern."
},
"rnprobe": {
@@ -2519,9 +2520,9 @@
"action_falling_skies": "Falling Skies",
"action_falling_skies_desc": "Neue Knoten oben im Visualizer einfallen lassen",
"action_snake": "Mesh Snake",
- "action_snake_desc": "Alle Knoten fressen; der Schwanz sind die gefressenen Knoten",
+ "action_snake_desc": "Fressen Sie jeden Knoten. Ihr Schwanz wächst mit jedem gesammelten Knoten.",
"action_pong": "Mesh Pong",
- "action_pong_desc": "Du gegen KI; Punktestand oben"
+ "action_pong_desc": "Du gegen die KI. Der Punktestand wird oben angezeigt."
},
"settings": {
"shortcut_saved": "Shortcut saved",
@@ -2542,7 +2543,7 @@
"nomad_micron_wasm_title": "Micron (WASM)",
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
- "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
+ "nomad_micron_wasm_desc_after_link": ") für Nomad Network-Seiten. Wenn ausgeschaltet oder nicht unterstützt, wird die Standardversion verwendet."
},
"debug": {
"title": "Debug Logs",

diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json
index f7a2b6c9..b586afd4 100644
--- a/meshchatx/src/frontend/locales/en.json
+++ b/meshchatx/src/frontend/locales/en.json
@@ -48,7 +48,7 @@
"view_process_log": "Process log (debug)",
"process_log_title": "Bot process log",
"process_log_empty": "No log output yet for this bot.",
- "process_log_truncated": "Only the end of the log is shown; the file on disk is larger.",
+ "process_log_truncated": "Only the end of the log is shown. The full file on disk is larger.",
"process_log_loading": "Loading log…",
"process_log_failed": "Could not load process log",
"process_log_copied": "Log copied to clipboard",
@@ -111,9 +111,9 @@
"messages_sidebar_position_left": "Left",
"messages_sidebar_position_right": "Right",
"ui_transparency": "Background transparency",
- "ui_transparency_description": "Increases see-through on the main shell background. Side panels stay solid for readability.",
+ "ui_transparency_description": "Increases transparency on the main background. Side panels stay solid for readability.",
"ui_glass_enabled": "Glass effect",
- "ui_glass_enabled_description": "Frosted blur on glass-style cards. When off, cards use solid surfaces.",
+ "ui_glass_enabled_description": "Adds a frosted blur effect to cards. When off, cards use solid colors.",
"reset_appearance_defaults": "Reset appearance to defaults",
"light_theme": "Light Theme",
"dark_theme": "Dark Theme",
@@ -125,12 +125,12 @@
"transport_toggle_description": "Route announces, respond to path requests and help your mesh stay online.",
"requires_restart": "Requires restart after toggling.",
"show_community_interfaces": "Show Community Interfaces",
- "community_interfaces_description": "Surface community-maintained presets while adding new interfaces.",
+ "community_interfaces_description": "Show community-maintained presets when adding new interfaces.",
"reliability": "Reliability",
"lxmf_settings_eyebrow": "LXMF",
"privacy_eyebrow": "Privacy",
"privacy_data_title": "Data & device",
- "privacy_data_description": "Local message history, telemetry to trusted peers, and related options. Deleting here only affects this device.",
+ "privacy_data_description": "Manage local message history, telemetry, and other privacy options. Deleting here only affects this device.",
"privacy_data": "Data & device",
"privacy_subsection_device": "This device",
"privacy_subsection_telemetry": "Mesh telemetry",
@@ -143,11 +143,11 @@
"auto_fallback_title": "Auto fall back to propagation node",
"auto_fallback_description": "Failed direct deliveries are queued on your preferred propagation node.",
"inbound_stamps_required_title": "Require inbound stamps",
- "inbound_stamps_required_description": "When off, direct LXMF messages to you do not require proof-of-work stamps. When on, set the stamp cost below (higher means more work for senders).",
+ "inbound_stamps_required_description": "When off, direct messages to you do not require proof-of-work stamps. When on, set the stamp cost below. Higher values mean more work for senders.",
"inbound_stamp_cost": "Inbound Message Stamp Cost",
- "inbound_stamp_description": "Proof-of-work difficulty for direct delivery messages when inbound stamps are required. Range: 1-254. Default: 8.",
+ "inbound_stamp_description": "Proof-of-work difficulty for direct messages. Range: 1-254. Default: 8.",
"local_message_auto_delete_title": "Delete old messages on this device",
- "local_message_auto_delete_description": "Removes messages from the local database after the age you set. This only affects this device. Other people still have their own copies. No delete is sent to the network.",
+ "local_message_auto_delete_description": "Removes messages from the local database after the age you set. This only affects this device and no data is deleted from the network.",
"local_message_auto_delete_age": "Delete messages older than",
"local_message_auto_delete_unit_aria": "Time unit for message retention",
"local_message_auto_delete_unit_days": "days",
@@ -181,7 +181,7 @@
"last_synced": "Last synced {time} ago.",
"last_synced_never": "Last synced: never.",
"propagation_stamp_cost": "Propagation Node Stamp Cost",
- "propagation_stamp_description": "Require proof-of-work stamps for messages propagated through your node. Higher values require more computational work. Range: 13-254. Default: 16. **Note:** Changing this requires restarting the app.",
+ "propagation_stamp_description": "Require proof-of-work stamps for messages sent through your node. Higher values require more work. Range: 13-254. Default: 16. **Note:** Changing this requires a restart.",
"language": "Language",
"select_language": "Select your preferred language.",
"tagline": "All-in-one Reticulum client",
@@ -222,9 +222,9 @@
"message_font_size": "Message font size",
"message_icon_size": "Icon size",
"detailed_outbound_send_status": "Detailed outbound send status",
- "detailed_outbound_send_status_description": "Show pathfinding styling, spinners, and technical tooltips while a message is sending. When off, a single muted check is shown until sending takes a few seconds.",
+ "detailed_outbound_send_status_description": "Show detailed status like pathfinding and technical tooltips while sending. When off, a simple checkmark is shown.",
"message_timestamp_grouping": "Group message timestamps",
- "message_timestamp_grouping_description": "When on, the chat shows date headers and clusters timestamps on one bubble per run. When off, every message shows its time and date bubbles are hidden.",
+ "message_timestamp_grouping_description": "When on, messages are grouped by date and timestamps are simplified. When off, every message shows its exact time.",
"search_settings": "Search settings...",
"auto_resend": "Auto Resend",
"retry_attachments": "Retry Attachments",
@@ -241,9 +241,9 @@
"stranger_protection": "Stranger Protection",
"stranger_protection_description": "Control how the app handles messages and attachments from unknown peers.",
"block_stranger_attachments": "Block Attachments from Strangers",
- "block_stranger_attachments_description": "Automatically strip file, image, and audio attachments from peers who are not in your contacts. Text messages are still delivered.",
+ "block_stranger_attachments_description": "Automatically remove file, image, and audio attachments from people not in your contacts. Text messages are still delivered.",
"block_all_from_strangers": "Block Everything from Strangers",
- "block_all_from_strangers_description": "Silently drop all messages, attachments, and calls from peers who are not in your contacts. Nothing is delivered or stored.",
+ "block_all_from_strangers_description": "Ignore all messages, attachments, and calls from people not in your contacts. Nothing is delivered or saved.",
"show_unknown_contact_banner": "Show Unknown Contact Banner",
"show_unknown_contact_banner_description": "When enabled, a notice appears at the top of conversations with peers who are not in your contacts.",
"warn_on_stranger_links": "Warn Before Opening Stranger Links",
@@ -259,7 +259,7 @@
"desktop_open_calls_in_separate_window": "Open Calls in 2nd Window",
"desktop_open_calls_in_separate_window_description": "When a call is active, it will be shown in a separate pop-out window rather than inside the app.",
"desktop_hardware_acceleration_enabled": "Hardware Acceleration",
- "desktop_hardware_acceleration_enabled_description": "Disable this if you experience UI flickering, black screens or graphical glitches.",
+ "desktop_hardware_acceleration_enabled_description": "Disable this if you experience flickering, black screens, or other graphical issues.",
"translator": "Translator",
"translator_enabled": "Enable Translator",
"translator_description": "Enable translation features in conversations.",
@@ -308,9 +308,9 @@
"blackhole_integration_enabled": "Blackhole Integration",
"blackhole_integration_description": "Automatically blackhole identities at the Reticulum transport layer when banishing users in MeshChatX.",
"announce_limits": "Announce Limits",
- "announce_limits_description": "Limit how many announces are kept in the database per aspect (oldest removed first) and how many load per API request. Also caps search and discovered-interface payloads. Clear a numeric field and save to restore defaults.",
+ "announce_limits_description": "Limit how many announcements are kept in the database and how many are loaded at once. Clear a field and save to restore defaults.",
"announce_store_heading": "Store incoming announces",
- "announce_store_description": "When off, received announces of that type are not written to the database. Disabling a category only affects storage; it does not stop the network or your own announces. A local hosted NomadNet page node is still listed when NomadNet storage is off.",
+ "announce_store_description": "When off, received announces of this type are not saved. This only affects storage and does not stop the network or your own announces. Your local NomadNet node will still be listed.",
"announce_store_lxmf": "LXMF (lxmf.delivery)",
"announce_store_lxst": "LXST telephony (lxst.telephony)",
"announce_store_nomad": "NomadNet nodes (nomadnetwork.node)",
@@ -326,7 +326,7 @@
"announce_limit_nomadnet": "NomadNet",
"announce_limit_prop": "Prop Nodes",
"csp_settings": "Content Security Policy (CSP)",
- "csp_description": "Manually add allowed domains and sources for various resource types. This is useful for custom tile servers, bots, or external integrations.",
+ "csp_description": "Manually add allowed domains for various resources. This is useful for custom map servers, bots, or external integrations.",
"csp_extra_connect_src": "Extra Connect Sources",
"csp_extra_connect_src_description": "Additional sources for fetch/websocket connections (e.g. https://api.example.com).",
"csp_extra_img_src": "Extra Image Sources",
@@ -347,7 +347,7 @@
"location_manual_lon": "Longitude",
"location_manual_alt": "Altitude (m)",
"telemetry_enabled": "Telemetry Enabled",
- "telemetry_description": "Allow MeshChatX to send and receive telemetry data. This includes responding to location requests from trusted peers.",
+ "telemetry_description": "Allow MeshChatX to send and receive telemetry data, such as responding to location requests from trusted peers.",
"telemetry_trusted_peers": "Trusted Telemetry Peers",
"telemetry_no_trusted_peers": "No trusted peers configured. Trust peers from the chat menu to allow them to request your location.",
"telemetry_revoke_trust": "Revoke Trust",
@@ -397,7 +397,7 @@
},
"stickers": {
"settings_title": "Stickers",
- "settings_description": "Saved images for this identity. Use them from the message composer or save images from chats. Export or import a JSON backup.",
+ "settings_description": "Your saved images for this identity. Use them in messages or save images from chats. You can also export or import a backup.",
"export": "Export stickers",
"import": "Import stickers",
"export_done": "Stickers exported",
@@ -511,7 +511,7 @@
"title": "Sticker editor",
"create_button": "Create sticker",
"processing": "Processing...",
- "canvas_hint": "Preview is scaled to fit; export uses a 512×512 canvas.",
+ "canvas_hint": "Preview is scaled to fit. Export uses a 512×512 canvas.",
"section_source": "Source",
"choose_image": "Choose image",
"section_transform": "Transform",
@@ -581,7 +581,7 @@
},
"gifs": {
"settings_title": "GIFs",
- "settings_description": "Your personal GIF library for this identity. Upload GIF and animated WebP files, then quickly reuse them across chats. Most-used GIFs are shown first.",
+ "settings_description": "Your personal GIF library. Upload GIF and animated WebP files to reuse them in chats. Your most-used GIFs are shown first.",
"export": "Export GIFs",
"import": "Import GIFs",
"export_done": "GIFs exported",
@@ -868,7 +868,7 @@
"backbone_transport_identity_placeholder": "e53433e51cde34c42a3245ba3fe1ad69",
"backbone_transport_identity_hint": "Matches Reticulum backbone remote examples that only set remote and target_port. Use the hash when an operator or directory specifies it.",
"loopback_local_title": "Local / loopback",
- "loopback_local_body": "Reticulum wires shared-instance traffic through LocalClientInterface internally; there is no separate loopback form like TCP Client. To talk to another RNS process on this host, use TCP Client to 127.0.0.1 and that instance's port, or ship an external interface module (for example MyInterface.py) under Reticulum's interfacepath.",
+ "loopback_local_body": "Reticulum uses a shared instance internally. To talk to another RNS process on this host, use a TCP Client to 127.0.0.1 with the instance port, or use an external interface module in the interface path.",
"loopback_local_docs_hint": "See the Interfaces chapter for supported types.",
"loopback_local_docs_link": "Open bundled Reticulum manual",
"custom_external_intro": "Types such as WeaveInterface or your own class are loaded when Reticulum finds a matching module file (TypeName.py) under interfacepath and exposes interface_class (see RNS source). Options below are merged into the interface stanza in your config file.",
@@ -913,12 +913,12 @@
"discovered_no_config": "This announce did not include a ready-to-paste config block.",
"discovered_prefill_applied": "Prefilled fields from discovered interface.",
"rnode_ble_toggle": "Bluetooth LE (RNode UART)",
- "rnode_ble_hint": "Reticulum uses BLE via bleak on the device running MeshChatX. Pair or bond the RNode in the OS first. A browser-only or remote UI cannot attach BLE to Reticulum; use Electron, Linux, macOS, Windows, or the Android app, where the bundled Python includes bleak. On Android, Bluetooth still follows normal OS pairing, hardware support, and permission prompts.",
+ "rnode_ble_hint": "Reticulum uses Bluetooth on this device. Pair the RNode in your OS settings first. This requires the Desktop or Android app. On Android, you must also allow the required permissions.",
"rnode_ble_peer_label": "BLE name or MAC",
"rnode_ble_peer_placeholder": "MyRNode or aa:bb:cc:dd:ee:ff",
"rnode_ble_peer_required": "Enter a BLE advertised name or MAC address for the RNode.",
"rnode_ip_host_label": "Host or IP address",
- "rnode_tcp_port_fixed_hint": "Reticulum opens TCP port 7633 on the RNode itself; enter only the hostname or IP (do not add :port).",
+ "rnode_tcp_port_fixed_hint": "Reticulum uses port 7633 on the RNode. Enter only the hostname or IP without the port.",
"rnode_tcp_host_required": "Enter the hostname or IP for RNode over TCP.",
"listen_ip_required": "Listen IP is required.",
"kernel_iface_picker_title": "Interfaces on this host",
@@ -1063,7 +1063,7 @@
"export_region_oceania": "Oceania",
"vector_exchange_title": "GeoJSON / KML / KMZ",
"vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
- "vector_exchange_hint": "Imports support icons via mcx_icon_href, mcx_icon_data_url (data URIs), Mapbox simplestyle marker-color, and KML/KMZ IconStyle. KMZ packs KML with embedded images. Name, description, and extra properties import/export with GeoJSON and KML; select a drawing to see metadata above it.",
+ "vector_exchange_hint": "Imports support icons from various formats including GeoJSON and KML. Select a drawing to see its metadata.",
"vector_import_geojson": "Import GeoJSON",
"vector_import_kml": "Import KML",
"vector_import_kmz": "Import KMZ",
@@ -1207,7 +1207,7 @@
"raw_path_value_unknown": "Unknown",
"raw_path_finding_measure": "Pathfinding at send (outbound)",
"raw_path_row_hash_rnpath": "Path table hash (rnpath)",
- "raw_path_row_hash_rnpath_hint": "Same as the destination hash Reticulum used for this route; search it in the rnpath path table.",
+ "raw_path_row_hash_rnpath_hint": "The destination hash used by Reticulum for this route. You can find it in the path table.",
"copy_message": "Copy message",
"message_copied": "Message copied",
"failed_copy_message": "Could not copy message",
@@ -1301,7 +1301,7 @@
"forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
"forward_verify_show": "Source and verification",
"forward_verify_hide": "Hide verification",
- "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_explanation": "Paper LXMF links only work if the full message is available and fits Paper limits. Quoted snippets can be faked.",
"forward_verify_loading": "Looking up verification URI…",
"forward_verify_open_uri": "Open verification URI",
"forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
@@ -1333,9 +1333,9 @@
"share_apk": "Share app (APK)",
"share_apk_failed": "Could not open the share sheet for the APK.",
"nomad_micron_wasm_title": "Micron (WASM)",
- "nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
+ "nomad_micron_wasm_desc_before_link": "Use a faster engine (",
"nomad_micron_wasm_link_label": "micron-parser-go",
- "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
+ "nomad_micron_wasm_desc_after_link": ") for Nomad Network pages. If turned off or unsupported, it falls back to the standard version."
},
"debug": {
"title": "Debug Logs",
@@ -1496,10 +1496,11 @@
"renderer_chip_micron_wasm": "Micron WASM",
"renderer_hint_micron_js": "micron-parser (JavaScript)",
"renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
- "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_hint_micron_wasm_pending": "Faster version loading or unavailable. Using the standard version.",
"renderer_popover_micron_wasm_powered": "Powered by ",
"renderer_popover_micron_wasm_active_tail": " {version}. WebAssembly renderer.",
- "renderer_popover_micron_wasm_pending_tail": " {version} is unavailable or still loading; using micron-parser (JavaScript).",
+ "renderer_popover_micron_wasm_pending_tail": " {version} is loading or unavailable. Using the standard version.",
+ "renderer_switch_title": "Parser",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
"renderer_chip_plaintext": "Text",
@@ -1591,7 +1592,7 @@
"licenses": {
"section_label": "Legal",
"title": "Third-party licenses",
- "description": "Runtime dependency versions, authors, and SPDX or declared license strings. Data is collected from the installed Python environment. Frontend data uses pnpm when it works; otherwise packages are read from node_modules (e.g. when pnpm licenses fails on the lockfile).",
+ "description": "Shows versions and licenses for all software components. This data is collected from the local environment.",
"short_description": "Dependency versions, authors, and licenses for backend and frontend.",
"search_placeholder": "Search packages, versions, authors, licenses...",
"generated_at": "Generated at {time}",
@@ -1683,7 +1684,7 @@
"move_down": "Move down",
"remove_rule": "Remove rule",
"terms_label": "Terms or patterns",
- "terms_placeholder": "One per line or comma-separated. Substrings are case-insensitive. Regex: one pattern per line; invalid patterns are removed when saving.",
+ "terms_placeholder": "One per line or separated by commas. Matches are case-insensitive. You can also use regular expressions (one per line).",
"match_targets_label": "Match in",
"match_peer_fields": "Peer display name, custom name, contact fields",
"match_message": "Message title and body (when available)",
@@ -1726,7 +1727,7 @@
"repository_server": {
"title": "Repository server",
"description": "Redistribute MeshChatX and Reticulum-related Python wheels plus your own files over plain HTTP so people on your network—or on this device—can download them.",
- "subtitle": "When online, refresh the bundled wheel set; add your own files anytime; start a small download page from the app or use the separate HTTP helper.",
+ "subtitle": "Refresh the included software packages, add your own files, or start a download page for other devices.",
"back_tools": "Back to tools",
"http_heading": "Plain HTTP mirror",
"host_label": "Listen address",
@@ -1920,14 +1921,14 @@
"serial": {
"title": "USB serial is unavailable",
"polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
- "android_webview_no_serial": "Android WebView does not expose Web Serial; use the desktop browser or wait for the bundled flasher.",
+ "android_webview_no_serial": "Android does not support Web Serial in this view. Use a desktop browser or the built-in flasher.",
"browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
"android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
"unknown": "USB serial cannot be initialised in this environment."
},
"bluetooth": {
"title": "Bluetooth is unavailable",
- "android_bridge_not_implemented": "Web Bluetooth is unavailable in this WebView; use Bluetooth from the OS or a different browser.",
+ "android_bridge_not_implemented": "Web Bluetooth is not available here. Use the OS Bluetooth settings or a different browser.",
"browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
"insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
"requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
@@ -2114,7 +2115,7 @@
"heard_title_short": "RNGit · {prefix}",
"unnamed_node": "RNGit node",
"hops_label": "Hops: {n}",
- "intro": "RNGit has no global index: paste candidate repository names (one per line). MeshChatX tries a remote ref list for each; reachable repos show a git clone line you can copy. This does not host or fetch git data inside the app.",
+ "intro": "Paste repository names (one per line) to find them on the network. Reachable repos will show a clone command you can copy. This app does not store any git data.",
"destination_hash": "RNGit destination hash (32 hex)",
"group_name": "Group (rngit config)",
"repo_names_label": "Repository names to try",
@@ -2134,7 +2135,7 @@
"copy_failed": "Could not copy",
"refs_preview": "Refs (preview)",
"truncated": "(truncated)",
- "no_clone_hint": "No clone line for unreachable names; fix access or spelling on the rngit server.",
+ "no_clone_hint": "No clone command available for unreachable names. Check the spelling or your connection.",
"experimental_footer": "Experimental: RNGit tooling may change without notice."
},
"rnprobe": {
@@ -2636,9 +2637,9 @@
"action_falling_skies": "Falling Skies",
"action_falling_skies_desc": "Drop new graph nodes from the top of the visualizer",
"action_snake": "Mesh Snake",
- "action_snake_desc": "Eat every node; your tail is the nodes you collect",
+ "action_snake_desc": "Eat every node. Your tail grows with every node you collect.",
"action_pong": "Mesh Pong",
- "action_pong_desc": "You vs AI; score at the top",
+ "action_pong_desc": "You vs AI. The score is shown at the top.",
"action_getting_started": "Getting Started",
"action_getting_started_desc": "Open the setup guide",
"action_changelog": "Changelog",

diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json
index 2cc9bd05..ad38ebff 100644
--- a/meshchatx/src/frontend/locales/es.json
+++ b/meshchatx/src/frontend/locales/es.json
@@ -48,7 +48,7 @@
"view_process_log": "Registro del proceso (depuración)",
"process_log_title": "Registro del proceso del bot",
"process_log_empty": "Aún no hay salida de registro para este bot.",
- "process_log_truncated": "Solo se muestra el final del registro; el archivo en disco es más grande.",
+ "process_log_truncated": "Solo se muestra el final del registro. El archivo completo en disco es más grande.",
"process_log_loading": "Cargando registro…",
"process_log_failed": "No se pudo cargar el registro del proceso",
"process_log_copied": "Registro copiado al portapapeles",
@@ -111,9 +111,9 @@
"messages_sidebar_position_left": "Izquierda",
"messages_sidebar_position_right": "Derecha",
"ui_transparency": "Transparencia de los antecedentes",
- "ui_transparency_description": "Aumenta la vista hacia el fondo principal de la cáscara. Los paneles laterales se mantienen sólidos para la legibilidad.",
+ "ui_transparency_description": "Aumenta la transparencia del fondo principal. Los paneles laterales permanecen opacos para facilitar la lectura.",
"ui_glass_enabled": "Efecto de vidrio",
- "ui_glass_enabled_description": "Difuminado en las tarjetas de vidrio. Cuando se apaga, las tarjetas usan superficies sólidas.",
+ "ui_glass_enabled_description": "Añade un efecto de desenfoque a las tarjetas. Cuando está desactivado, las tarjetas usan colores sólidos.",
"reset_appearance_defaults": "Reiniciar la apariencia a predeterminados",
"light_theme": "Tema de luz",
"dark_theme": "Tema oscuro",
@@ -125,12 +125,12 @@
"transport_toggle_description": "La ruta anuncia, responde a las solicitudes de ruta y ayuda a su malla a permanecer en línea.",
"requires_restart": "Requiere reiniciar después de cambiar.",
"show_community_interfaces": "Mostrar interfaces comunitarias",
- "community_interfaces_description": "Superficie presets mantenidos por la comunidad al agregar nuevas interfaces.",
+ "community_interfaces_description": "Muestra los ajustes preestablecidos mantenidos por la comunidad al añadir nuevas interfaces.",
"reliability": "Confiabilidad",
"lxmf_settings_eyebrow": "LXMF",
"privacy_eyebrow": "Privacidad",
"privacy_data_title": "Datos y dispositivo",
- "privacy_data_description": "Historial local, telemetría a pares de confianza. Borrar aquí solo afecta a este dispositivo.",
+ "privacy_data_description": "Gestione el historial de mensajes locales, la telemetría y otras opciones de privacidad. La eliminación aquí solo afecta a este dispositivo.",
"privacy_data": "Datos y dispositivo",
"privacy_subsection_device": "Este dispositivo",
"privacy_subsection_telemetry": "Telemetría mesh",
@@ -143,11 +143,11 @@
"auto_fallback_title": "Regreso automático al nodo de propagación",
"auto_fallback_description": "Las entregas directas fallidas se apagan en su nodo de propagación preferido.",
"inbound_stamps_required_title": "Requiere sellos de entrada",
- "inbound_stamps_required_description": "Cuando está apagado, los mensajes LXMF directos a usted no requieren sellos de prueba de trabajo. Cuando está encendido, establece el costo del sello abajo (más alto significa más trabajo para los remitentes).",
+ "inbound_stamps_required_description": "Cuando está desactivado, los mensajes directos que recibe no requieren sellos proof-of-work. Cuando está activado, establezca el costo del sello a continuación. Los valores más altos significan más trabajo para los remitentes.",
"inbound_stamp_cost": "Costo de sello de mensaje",
- "inbound_stamp_description": "Dificultad de prueba de trabajo para mensajes de entrega directa cuando se requieren sellos de entrada. Rango: 1-254. Por defecto: 8.",
+ "inbound_stamp_description": "Dificultad proof-of-work para mensajes directos. Rango: 1-254. Predeterminado: 8.",
"local_message_auto_delete_title": "Borrar mensajes antiguos en este dispositivo",
- "local_message_auto_delete_description": "Elimina mensajes de la base de datos local tras la antigüedad indicada. Solo afecta a este dispositivo. Los demás conservan sus copias. No se envía un borrado a la red.",
+ "local_message_auto_delete_description": "Elimina los mensajes de la base de datos local después del tiempo establecido. Esto solo afecta a este dispositivo y no se eliminan datos de la red.",
"local_message_auto_delete_age": "Borrar mensajes anteriores a",
"local_message_auto_delete_unit_aria": "Unidad de tiempo de retención",
"local_message_auto_delete_unit_days": "días",
@@ -181,7 +181,7 @@
"last_synced": "Última sincronización hace {time}.",
"last_synced_never": "Última sincronización: nunca.",
"propagation_stamp_cost": "Propagation Node Stamp Cost",
- "propagation_stamp_description": "Requiere sellos de prueba de trabajo para mensajes propagados a través de su nodo. Los valores superiores requieren un trabajo más computacional. Rango: 13-254. Predeterminado: 16. **Nota:** Cambiar esto requiere reiniciar la aplicación.",
+ "propagation_stamp_description": "Requiere sellos proof-of-work para los mensajes enviados a través de su nodo. Los valores más altos requieren más trabajo. Rango: 13-254. Predeterminado: 16. **Nota:** Cambiar esto requiere un reinicio.",
"language": "Idioma",
"select_language": "Seleccione su idioma preferido.",
"tagline": "Cliente todo en uno Reticulum",
@@ -222,9 +222,9 @@
"message_font_size": "Tamaño de la fuente",
"message_icon_size": "Tamaño del icono",
"detailed_outbound_send_status": "Salida detallada enviar estado",
- "detailed_outbound_send_status_description": "Mostrar estilos de patinaje, spinners y herramientas técnicas mientras un mensaje está enviando. Cuando está apagado, se muestra un solo cheque de muda hasta que el envío toma unos segundos.",
+ "detailed_outbound_send_status_description": "Muestra el estado detallado, como la búsqueda de rutas y las sugerencias técnicas durante el envío. Cuando está desactivado, se muestra una marca de verificación simple.",
"message_timestamp_grouping": "Agrupar marcas de tiempo",
- "message_timestamp_grouping_description": "Si está activo, el chat muestra cabeceras de fecha y agrupa la hora en una burbuja por bloque. Si está desactivado, cada mensaje muestra su hora y se ocultan las burbujas de fecha.",
+ "message_timestamp_grouping_description": "Cuando está activado, los mensajes se agrupan por fecha y las marcas de tiempo se simplifican. Cuando está desactivado, cada mensaje muestra su hora exacta.",
"search_settings": "Ajustes de búsqueda...",
"auto_resend": "Reembolso automático",
"retry_attachments": "Retry Attachments",
@@ -241,9 +241,9 @@
"stranger_protection": "Stranger Protection",
"stranger_protection_description": "Controla cómo la aplicación maneja mensajes y archivos adjuntos de pares desconocidos.",
"block_stranger_attachments": "Atajos de bloque de Extranjeros",
- "block_stranger_attachments_description": "Extrae automáticamente archivos, imágenes y archivos adjuntos de audio de pares que no están en sus contactos. Los mensajes de texto siguen siendo entregados.",
+ "block_stranger_attachments_description": "Elimina automáticamente los archivos adjuntos, imágenes y audio de personas que no están en tus contactos. Los mensajes de texto se siguen entregando.",
"block_all_from_strangers": "Bloquear todo de los extraños",
- "block_all_from_strangers_description": "Deja silenciosamente todos los mensajes, apegos y llamadas de compañeros que no están en tus contactos. Nada es entregado o almacenado.",
+ "block_all_from_strangers_description": "Ignora todos los mensajes, archivos adjuntos y llamadas de personas que no están en tus contactos. No se entrega ni se guarda nada.",
"show_unknown_contact_banner": "Show Unknown Contact Banner",
"show_unknown_contact_banner_description": "Cuando está habilitado, aparece un aviso en la parte superior de las conversaciones con compañeros que no están en sus contactos.",
"warn_on_stranger_links": "Advertido antes de abrir Enlaces extraños",
@@ -309,7 +309,7 @@
"announce_limits": "Anuncio Límites",
"announce_limits_description": "Limite cuántos anuncios se guardan en la base de datos por aspecto (antiguo eliminado primero) y cuántas cargas por solicitud de API. También tapa búsqueda y descargas de interfaz descubierto. Limpiar un campo numérico y guardar para restaurar los defectos.",
"announce_store_heading": "Guardar anuncios entrantes",
- "announce_store_description": "Si está desactivado, no se escriben en la base de datos. Solo afecta al almacenamiento, no a la red ni a tus anuncios. Un nodo NomadNet local en esta máquina sigue apareciendo aunque NomadNet esté desactivado.",
+ "announce_store_description": "Si está desactivado, los anuncios de este tipo no se guardan. Esto solo afecta al almacenamiento y no detiene la red ni sus propios anuncios. Su nodo NomadNet local seguirá apareciendo en la lista.",
"announce_store_lxmf": "LXMF (lxmf.delivery)",
"announce_store_lxst": "LXST telefonía (lxst.telephony)",
"announce_store_nomad": "Nodos NomadNet (nomadnetwork.node)",
@@ -511,7 +511,7 @@
"title": "Sticker editor",
"create_button": "Crear pegatina",
"processing": "Procesando...",
- "canvas_hint": "La vista previa se escala para adaptarse; la exportación utiliza un lienzo 512×512.",
+ "canvas_hint": "La vista previa está escalada. La exportación utiliza un lienzo de 512×512.",
"section_source": "Fuente",
"choose_image": "Elija la imagen",
"section_transform": "Transformación",
@@ -868,7 +868,7 @@
"backbone_transport_identity_placeholder": "e53433e51cde34c42a3245ba3fe1ad69",
"backbone_transport_identity_hint": "Como los ejemplos remotos backbone de Reticulum solo con remote y target_port. Use el hash si el operador o el directorio lo indican.",
"loopback_local_title": "Local / loopback",
- "loopback_local_body": "Reticulum usa LocalClientInterface internamente para la instancia compartida; no hay formulario loopback como TCP Client. Para otro RNS en este equipo use TCP Client a 127.0.0.1 y el puerto de la instancia, o instale un m\u00f3dulo externo (por ejemplo MyInterface.py) en interfacepath.",
+ "loopback_local_body": "Reticulum utiliza una instancia compartida internamente. Para comunicarse con otro proceso RNS en este host, use un cliente TCP a 127.0.0.1 con el puerto de la instancia, o use un módulo de interfaz externo.",
"loopback_local_docs_hint": "Vea el cap\u00edtulo Interfaces para tipos admitidos.",
"loopback_local_docs_link": "Abrir manual Reticulum incluido",
"custom_external_intro": "Tipos como WeaveInterface se cargan si Reticulum encuentra un archivo de m\u00f3dulo coincidente (TypeName.py) en interfacepath con interface_class (cargador externo RNS). Las opciones JSON se fusionan en la secci\u00f3n de interfaz de su archivo de configuraci\u00f3n.",
@@ -913,12 +913,12 @@
"discovered_no_config": "Este anuncio no incluyó un bloque de configuración listo para pegar.",
"discovered_prefill_applied": "Campos rellenados desde la interfaz descubierta.",
"rnode_ble_toggle": "Bluetooth LE (RNode UART)",
- "rnode_ble_hint": "Reticulum usa BLE mediante bleak en el dispositivo donde corre MeshChatX. Empareje o vincule el RNode en el sistema primero. Una interfaz solo web o remota no puede conectar BLE a Reticulum; use Electron, Linux, macOS, Windows o la app Android, donde Python integrado incluye bleak. En Android, el Bluetooth sigue las reglas habituales de emparejamiento, hardware y permisos del sistema.",
+ "rnode_ble_hint": "Reticulum utiliza Bluetooth en este dispositivo. Primero vincule el RNode en la configuración de su sistema operativo. Esto requiere la aplicación para escritorio o Android. En Android, también debe otorgar los permisos necesarios.",
"rnode_ble_peer_label": "Nombre BLE o MAC",
"rnode_ble_peer_placeholder": "MyRNode o aa:bb:cc:dd:ee:ff",
"rnode_ble_peer_required": "Introduzca el nombre anunciado o la MAC del RNode.",
"rnode_ip_host_label": "Nombre de host o dirección IP",
- "rnode_tcp_port_fixed_hint": "Reticulum usa el puerto TCP 7633 en el RNode; indique solo el host o la IP (sin :puerto).",
+ "rnode_tcp_port_fixed_hint": "Reticulum utiliza el puerto 7633 en el RNode. Ingrese solo el nombre de host o la IP sin el puerto.",
"rnode_tcp_host_required": "Indique el host o la IP para RNode por TCP.",
"listen_ip_required": "La IP de escucha es obligatoria.",
"kernel_iface_picker_title": "Interfaces en este equipo",
@@ -1063,7 +1063,7 @@
"export_region_oceania": "Oceania",
"vector_exchange_title": "GeoJSON / KML / KMZ",
"vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
- "vector_exchange_hint": "Imports support icons via mcx_icon_href, mcx_icon_data_url (data URIs), Mapbox simplestyle marker-color, and KML/KMZ IconStyle. KMZ packs KML with embedded images. Name, description, and extra properties import/export with GeoJSON and KML; select a drawing to see metadata above it.",
+ "vector_exchange_hint": "La importación admite iconos de varios formatos, incluidos GeoJSON y KML. Seleccione un dibujo para ver sus metadatos.",
"vector_import_geojson": "Import GeoJSON",
"vector_import_kml": "Import KML",
"vector_import_kmz": "Import KMZ",
@@ -1207,7 +1207,7 @@
"raw_path_value_unknown": "Desconocido",
"raw_path_finding_measure": "Pathfinding al enviar (saliente)",
"raw_path_row_hash_rnpath": "Hash de tabla de rutas (rnpath)",
- "raw_path_row_hash_rnpath_hint": "Igual que el hash de destino que Reticulum usó para esta ruta; búscalo en la tabla de rutas de rnpath.",
+ "raw_path_row_hash_rnpath_hint": "El hash de destino utilizado por Reticulum para esta ruta. Puede encontrarlo en la tabla de rutas.",
"copy_message": "Copiar mensaje",
"message_copied": "Mensaje copiado",
"failed_copy_message": "No se pudo copiar el mensaje",
@@ -1301,7 +1301,7 @@
"forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
"forward_verify_show": "Source and verification",
"forward_verify_hide": "Hide verification",
- "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_explanation": "Los enlaces Paper LXMF solo funcionan si el mensaje completo está disponible y se ajusta a los límites de Paper. Los fragmentos citados pueden ser falsificados.",
"forward_verify_loading": "Looking up verification URI…",
"forward_verify_open_uri": "Open verification URI",
"forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
@@ -1496,10 +1496,11 @@
"renderer_chip_micron_wasm": "Micron WASM",
"renderer_hint_micron_js": "micron-parser (JavaScript)",
"renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
- "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_hint_micron_wasm_pending": "Cargando versión rápida o no disponible. Usando la versión estándar.",
"renderer_popover_micron_wasm_powered": "Impulsado por ",
"renderer_popover_micron_wasm_active_tail": " {version}. Motor WebAssembly.",
- "renderer_popover_micron_wasm_pending_tail": " {version} no está disponible o sigue cargando; se usa micron-parser (JavaScript).",
+ "renderer_popover_micron_wasm_pending_tail": " {version} se está cargando o no está disponible. Usando la versión estándar.",
+ "renderer_switch_title": "Parser",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
"renderer_chip_plaintext": "Text",
@@ -1683,7 +1684,7 @@
"move_down": "Bajar",
"remove_rule": "Quitar regla",
"terms_label": "Términos o patrones",
- "terms_placeholder": "Uno por línea o separados por comas. Subcadenas sin distinguir mayúsculas. Regex: un patrón por línea; los inválidos se quitan al guardar.",
+ "terms_placeholder": "Uno por línea o separado por comas. La búsqueda no distingue entre mayúsculas y minúsculas. También puede usar expresiones regulares (una por línea).",
"match_targets_label": "Coincidir en",
"match_peer_fields": "Nombre mostrado del par, nombre propio, datos de contacto",
"match_message": "Título y cuerpo del mensaje (si hay)",
@@ -1726,7 +1727,7 @@
"repository_server": {
"title": "Servidor de repositorio",
"description": "Redistribuya ruedas Python de MeshChatX y del ecosistema Reticulum, y sus propios archivos, por HTTP sin cifrar para que otros en su red o en este equipo puedan descargarlos.",
- "subtitle": "Con red: actualice el conjunto de ruedas incluidas; añada archivos cuando quiera; abra una pequeña página de descargas en la app o use el servidor HTTP auxiliar.",
+ "subtitle": "Actualice los paquetes de software incluidos, agregue sus propios archivos o inicie una página de descarga para otros dispositivos.",
"back_tools": "Back to tools",
"http_heading": "Plain HTTP mirror",
"host_label": "Listen address",
@@ -1920,14 +1921,14 @@
"serial": {
"title": "USB serial is unavailable",
"polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
- "android_webview_no_serial": "Android WebView does not expose Web Serial; use the desktop browser or wait for the bundled flasher.",
+ "android_webview_no_serial": "Android no admite Web Serial en esta vista. Use un navegador de escritorio o el flasher integrado.",
"browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
"android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
"unknown": "USB serial cannot be initialised in this environment."
},
"bluetooth": {
"title": "Bluetooth is unavailable",
- "android_bridge_not_implemented": "Web Bluetooth is unavailable in this WebView; use Bluetooth from the OS or a different browser.",
+ "android_bridge_not_implemented": "Web Bluetooth no está disponible aquí. Use la configuración de Bluetooth del sistema o un navegador diferente.",
"browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
"insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
"requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
@@ -2114,7 +2115,7 @@
"heard_title_short": "RNGit · {prefix}",
"unnamed_node": "Nodo RNGit",
"hops_label": "Saltos: {n}",
- "intro": "RNGit no tiene índice global: pegue nombres candidatos de repositorio (uno por línea). MeshChatX intenta una lista de refs remota para cada uno; los repos alcanzables muestran una línea git clone para copiar. La aplicación no aloja ni obtiene datos git.",
+ "intro": "Pegue los nombres de los repositorios (uno por línea) para encontrarlos en la red. Los repositorios alcanzables mostrarán un comando clone para copiar. Esta aplicación no almacena datos de git.",
"destination_hash": "Hash de destino RNGit (32 hex)",
"group_name": "Grupo (configuración rngit)",
"repo_names_label": "Nombres de repositorio a probar",
@@ -2134,7 +2135,7 @@
"copy_failed": "No se pudo copiar",
"refs_preview": "Refs (vista previa)",
"truncated": "(truncado)",
- "no_clone_hint": "Sin línea de clonación para nombres inalcanzables; corrija acceso u ortografía en el servidor rngit.",
+ "no_clone_hint": "No hay comando clone disponible para nombres inalcanzables. Verifique el nombre o su conexión.",
"experimental_footer": "Experimental: las herramientas de RNGit pueden cambiar sin previo aviso."
},
"rnprobe": {
@@ -2636,9 +2637,9 @@
"action_falling_skies": "Cielos caídos",
"action_falling_skies_desc": "Suelta nuevos nodos gráficos desde la parte superior del visualizador",
"action_snake": "Mesh Snake",
- "action_snake_desc": "Come cada nodo; tu cola es los nodos que recoges",
+ "action_snake_desc": "Come cada nodo. Tu cola crece con cada nodo recolectado.",
"action_pong": "Mesh Pong",
- "action_pong_desc": "Usted vs AI; puntuación en la parte superior",
+ "action_pong_desc": "Usted contra la IA. La puntuación se muestra en la parte superior.",
"action_getting_started": "Comienzo",
"action_getting_started_desc": "Abra la guía de configuración",
"action_changelog": "Cambio",

diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json
index 583242f2..afba4eff 100644
--- a/meshchatx/src/frontend/locales/fr.json
+++ b/meshchatx/src/frontend/locales/fr.json
@@ -48,7 +48,7 @@
"view_process_log": "Journal de processus (débogage)",
"process_log_title": "Journal du processus du bot",
"process_log_empty": "Pas encore de sortie journal pour ce bot.",
- "process_log_truncated": "Seule la fin du journal est affichée ; le fichier sur disque est plus grand.",
+ "process_log_truncated": "Seule la fin du journal est affichée. Le fichier complet sur disque est plus grand.",
"process_log_loading": "Chargement du journal…",
"process_log_failed": "Impossible de charger le journal du processus",
"process_log_copied": "Journal copié dans le presse-papiers",
@@ -111,9 +111,9 @@
"messages_sidebar_position_left": "Gauche",
"messages_sidebar_position_right": "Droite",
"ui_transparency": "Transparence générale",
- "ui_transparency_description": "Augmente la visibilité sur le fond principal de la coque. Les panneaux latéraux restent solides pour la lisibilité.",
+ "ui_transparency_description": "Augmente la transparence sur l'arrière-plan principal. Les panneaux latéraux restent opaques pour la lisibilité.",
"ui_glass_enabled": "Effet verre",
- "ui_glass_enabled_description": "Brouillage gelé sur les cartes en verre. Lorsqu'elles sont éteintes, les cartes utilisent des surfaces solides.",
+ "ui_glass_enabled_description": "Ajoute un effet de flou givré aux cartes. Lorsqu'il est désactivé, les cartes utilisent des couleurs unies.",
"reset_appearance_defaults": "Réinitialiser l'apparence aux valeurs par défaut",
"light_theme": "Thème lumineux",
"dark_theme": "Thème sombre",
@@ -125,12 +125,12 @@
"transport_toggle_description": "Route annonce, répond aux demandes de chemin et aide votre mesh rester en ligne.",
"requires_restart": "Nécessite un redémarrage après le basculement.",
"show_community_interfaces": "Afficher les interfaces communautaires",
- "community_interfaces_description": "Préréglages entretenus par la communauté de surface tout en ajoutant de nouvelles interfaces.",
+ "community_interfaces_description": "Afficher les préréglages maintenus par la communauté lors de l'ajout de nouvelles interfaces.",
"reliability": "Fiabilité",
"lxmf_settings_eyebrow": "LXMF",
"privacy_eyebrow": "Confidentialité",
"privacy_data_title": "Données et appareil",
- "privacy_data_description": "Historique local, télémétrie vers des pairs de confiance. La suppression n'affecte que cet appareil.",
+ "privacy_data_description": "Gérez l'historique des messages locaux, la télémétrie et d'autres options de confidentialité. La suppression ici n'affecte que cet appareil.",
"privacy_data": "Données et appareil",
"privacy_subsection_device": "Cet appareil",
"privacy_subsection_telemetry": "Télémétrie mesh",
@@ -143,11 +143,11 @@
"auto_fallback_title": "Retour automatique au nœud de propagation",
"auto_fallback_description": "Les livraisons directes échouées sont en attente sur votre nœud de propagation préféré.",
"inbound_stamps_required_title": "Exiger des timbres entrants",
- "inbound_stamps_required_description": "Lorsqu'ils sont éteints, les messages LXMF ne nécessitent pas de tampons. Lors de l'activation, fixez le coût du timbre en dessous (plus élevé signifie plus de travail pour les expéditeurs).",
+ "inbound_stamps_required_description": "Lorsqu'il est désactivé, les messages directs qui vous sont adressés ne nécessitent pas de timbres proof-of-work. Lorsqu'il est activé, définissez le coût du timbre ci-dessous. Des valeurs plus élevées signifient plus de travail pour les expéditeurs.",
"inbound_stamp_cost": "Coût du timbre de message entrant",
- "inbound_stamp_description": "Proof-of-work difficulté pour les messages de livraison directe lorsque les timbres entrants sont requis. Gamme: 1-254. Par défaut : 8.",
+ "inbound_stamp_description": "Difficulté proof-of-work pour les messages directs. Plage : 1-254. Par défaut : 8.",
"local_message_auto_delete_title": "Supprimer les anciens messages sur cet appareil",
- "local_message_auto_delete_description": "Supprime les messages de la base locale après l'ancienneté choisie. Concerne uniquement cet appareil. Les autres gardent leurs copies. Aucune suppression n'est envoyée sur le réseau.",
+ "local_message_auto_delete_description": "Supprime les messages de la base de données locale après le délai que vous avez défini. Cela n'affecte que cet appareil et aucune donnée n'est supprimée du réseau.",
"local_message_auto_delete_age": "Supprimer les messages plus anciens que",
"local_message_auto_delete_unit_aria": "Unité de durée de conservation",
"local_message_auto_delete_unit_days": "jours",
@@ -181,7 +181,7 @@
"last_synced": "Dernière synchronisation : il y a {time}",
"last_synced_never": "Dernière synchronisation : jamais.",
"propagation_stamp_cost": "Coût du timbre du nœud de propagation",
- "propagation_stamp_description": "Exiger des timbres d'épreuve de travail pour les messages propagés par votre noeud. Des valeurs plus élevées nécessitent plus de travail de calcul. Portée : 13-254. Défaut : 16. **Note :** Changer cela nécessite de redémarrer l'application.",
+ "propagation_stamp_description": "Exiger des timbres proof-of-work pour les messages envoyés via votre nœud. Des valeurs plus élevées nécessitent plus de travail. Plage : 13-254. Par défaut : 16. **Remarque :** Toute modification nécessite un redémarrage.",
"language": "Langue",
"select_language": "Sélectionnez votre langue préférée.",
"tagline": "Client tout-en-un Reticulum",
@@ -222,9 +222,9 @@
"message_font_size": "Taille de la police du message",
"message_icon_size": "Taille de l'icône",
"detailed_outbound_send_status": "État d'envoi détaillé",
- "detailed_outbound_send_status_description": "Afficher le style de recherche de chemin, spinners, et outils techniques pendant qu'un message est envoyé. Lorsqu'il est éteint, une seule vérification est affichée jusqu'à ce que l'envoi prenne quelques secondes.",
+ "detailed_outbound_send_status_description": "Afficher l'état détaillé comme la recherche d'itinéraire et les info-bulles techniques pendant l'envoi. Lorsqu'il est désactivé, une simple coche s'affiche.",
"message_timestamp_grouping": "Regrouper les horodatages",
- "message_timestamp_grouping_description": "Si activé, le chat affiche des en-têtes de date et regroupe l'heure sur une bulle par bloc. Si désactivé, chaque message affiche l'heure et les bulles de date sont masquées.",
+ "message_timestamp_grouping_description": "Lorsqu'il est activé, les messages sont groupés par date et les horodatages sont simplifiés. Lorsqu'il est désactivé, chaque message affiche son heure exacte.",
"search_settings": "Paramètres de recherche...",
"auto_resend": "Resend automatique",
"retry_attachments": "Réessayer les pièces jointes",
@@ -241,9 +241,9 @@
"stranger_protection": "Protection des étrangers",
"stranger_protection_description": "Contrôler comment l'application traite les messages et les pièces jointes de pairs inconnus.",
"block_stranger_attachments": "Bloc des pièces jointes des étrangers",
- "block_stranger_attachments_description": "Enlevez automatiquement les fichiers, les images et les pièces jointes audio des pairs qui ne sont pas dans vos contacts. Les messages texte sont toujours livrés.",
+ "block_stranger_attachments_description": "Supprimer automatiquement les pièces jointes (fichiers, images et audio) des personnes ne figurant pas dans vos contacts. Les messages texte sont toujours livrés.",
"block_all_from_strangers": "Bloquez tout des étrangers",
- "block_all_from_strangers_description": "Laissez silencieusement tous les messages, les pièces jointes et les appels de pairs qui ne sont pas dans vos contacts. Rien n'est livré ou stocké.",
+ "block_all_from_strangers_description": "Ignorer tous les messages, pièces jointes et appels des personnes ne figurant pas dans vos contacts. Rien n'est livré ou enregistré.",
"show_unknown_contact_banner": "Afficher la bannière de contact inconnue",
"show_unknown_contact_banner_description": "Lorsque activé, un avis apparaît au sommet des conversations avec des pairs qui ne sont pas dans vos contacts.",
"warn_on_stranger_links": "Avertissement avant d'ouvrir des liens étrangers",
@@ -309,7 +309,7 @@
"announce_limits": "Annonce des limites",
"announce_limits_description": "Limiter le nombre d'annonces conservées dans la base de données par aspect (le plus ancien a été enlevé en premier) et le nombre de chargements par demande d'API. Aussi plafonne la recherche et l'interface découverte charges utiles. Effacer un champ numérique et enregistrer pour restaurer les valeurs par défaut.",
"announce_store_heading": "Enregistrer les annonces entrantes",
- "announce_store_description": "Désactivé, les annonces reçues de ce type ne sont pas écrites en base. Cela ne concerne que le stockage, pas le réseau ni vos annonces. Un nœud NomadNet hébergé localement reste listé si NomadNet est désactivé.",
+ "announce_store_description": "Si désactivé, les annonces de ce type ne sont pas enregistrées. Cela n'affecte que le stockage et n'arrête pas le réseau ou vos propres annonces. Votre nœud NomadNet local sera toujours listé.",
"announce_store_lxmf": "LXMF (lxmf.delivery)",
"announce_store_lxst": "LXST téléphonie (lxst.telephony)",
"announce_store_nomad": "Nœuds NomadNet (nomadnetwork.node)",
@@ -511,7 +511,7 @@
"title": "Éditeur d'étiquettes",
"create_button": "Créer un autocollant",
"processing": "Traitement...",
- "canvas_hint": "La prévisualisation est adaptée; l'exportation utilise une toile 512×512.",
+ "canvas_hint": "L'aperçu est redimensionné. L'exportation utilise une toile 512×512.",
"section_source": "Source",
"choose_image": "Choisir l'image",
"section_transform": "Transformer",
@@ -868,7 +868,7 @@
"backbone_transport_identity_placeholder": "e53433e51cde34c42a3245ba3fe1ad69",
"backbone_transport_identity_hint": "Comme les exemples backbone distants de Reticulum avec seulement remote et target_port. Utilisez le hachage si un opérateur ou un annuaire le précise.",
"loopback_local_title": "Local / bouclage",
- "loopback_local_body": "Reticulum utilise LocalClientInterface en interne pour l'instance partagée ; il n'y a pas de formulaire loopback comme TCP Client. Pour joindre un autre processus RNS sur cette machine, utilisez TCP Client vers 127.0.0.1 et le port de l'instance, ou installez un module d'interface externe (par exemple MyInterface.py) dans interfacepath.",
+ "loopback_local_body": "Reticulum utilise une instance partagée en interne. Pour communiquer avec un autre processus RNS sur cet hôte, utilisez un client TCP sur 127.0.0.1 avec le port de l'instance, ou utilisez un module d'interface externe.",
"loopback_local_docs_hint": "Voir le chapitre Interfaces pour les types pris en charge.",
"loopback_local_docs_link": "Ouvrir le manuel Reticulum intégré",
"custom_external_intro": "Les types comme WeaveInterface sont chargés si Reticulum trouve un fichier module correspondant (TypeName.py) dans interfacepath avec interface_class (voir le chargeur externe RNS). Les options JSON sont fusionnées dans la section interface de votre configuration.",
@@ -913,12 +913,12 @@
"discovered_no_config": "Cette annonce ne contenait pas de bloc de configuration prêt à coller.",
"discovered_prefill_applied": "Champs préremplis depuis l'interface découverte.",
"rnode_ble_toggle": "Bluetooth LE (RNode UART)",
- "rnode_ble_hint": "Reticulum utilise le BLE via bleak sur l'appareil qui exécute MeshChatX. Associez ou appairez d'abord le RNode dans le système. Une interface web seule ou distante ne peut pas raccorder le BLE à Reticulum ; utilisez Electron, Linux, macOS, Windows ou l'application Android, où Python embarqué inclut bleak. Sous Android, le Bluetooth suit l'appairage, le matériel et les demandes de permission habituels du système.",
+ "rnode_ble_hint": "Reticulum utilise le Bluetooth sur cet appareil. Associez d'abord le RNode dans les paramètres de votre système. Cela nécessite l'application Desktop ou Android. Sur Android, vous devez également autoriser les permissions requises.",
"rnode_ble_peer_label": "Nom BLE ou MAC",
"rnode_ble_peer_placeholder": "MyRNode ou aa:bb:cc:dd:ee:ff",
"rnode_ble_peer_required": "Entrez le nom annoncé ou l'adresse MAC du RNode.",
"rnode_ip_host_label": "Nom d'hôte ou adresse IP",
- "rnode_tcp_port_fixed_hint": "Reticulum utilise le port TCP 7633 sur le RNode ; saisissez uniquement le nom d'hôte ou l'IP (sans :port).",
+ "rnode_tcp_port_fixed_hint": "Reticulum utilise le port 7633 sur le RNode. Saisissez uniquement le nom d'hôte ou l'IP sans le port.",
"rnode_tcp_host_required": "Saisissez le nom d'hôte ou l'IP pour le RNode en TCP.",
"listen_ip_required": "L'adresse IP d'écoute est obligatoire.",
"kernel_iface_picker_title": "Interfaces sur cette machine",
@@ -1063,7 +1063,7 @@
"export_region_oceania": "Oceania",
"vector_exchange_title": "GeoJSON / KML / KMZ",
"vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
- "vector_exchange_hint": "Imports support icons via mcx_icon_href, mcx_icon_data_url (data URIs), Mapbox simplestyle marker-color, and KML/KMZ IconStyle. KMZ packs KML with embedded images. Name, description, and extra properties import/export with GeoJSON and KML; select a drawing to see metadata above it.",
+ "vector_exchange_hint": "L'importation prend en charge les icônes de divers formats, notamment GeoJSON et KML. Sélectionnez un dessin pour voir ses métadonnées.",
"vector_import_geojson": "Import GeoJSON",
"vector_import_kml": "Import KML",
"vector_import_kmz": "Import KMZ",
@@ -1207,7 +1207,7 @@
"raw_path_value_unknown": "Inconnu",
"raw_path_finding_measure": "Recherche de chemin à l'envoi (sortant)",
"raw_path_row_hash_rnpath": "Hash table des chemins (rnpath)",
- "raw_path_row_hash_rnpath_hint": "Identique au hash de destination utilisé par Reticulum pour cette route ; recherchez-le dans la table rnpath.",
+ "raw_path_row_hash_rnpath_hint": "Le hash de destination utilisé par Reticulum pour cet itinéraire. Vous pouvez le trouver dans la table des chemins.",
"copy_message": "Copier le message",
"message_copied": "Message copié",
"failed_copy_message": "Impossible de copier le message",
@@ -1301,7 +1301,7 @@
"forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
"forward_verify_show": "Source and verification",
"forward_verify_hide": "Hide verification",
- "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_explanation": "Les liens Paper LXMF ne fonctionnent que si le message complet est disponible et respecte les limites de Paper. Les extraits cités peuvent être falsifiés.",
"forward_verify_loading": "Looking up verification URI…",
"forward_verify_open_uri": "Open verification URI",
"forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
@@ -1496,10 +1496,11 @@
"renderer_chip_micron_wasm": "Micron WASM",
"renderer_hint_micron_js": "micron-parser (JavaScript)",
"renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
- "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_hint_micron_wasm_pending": "Chargement de la version rapide ou indisponible. Utilisation de la version standard.",
"renderer_popover_micron_wasm_powered": "Propulsé par ",
"renderer_popover_micron_wasm_active_tail": " {version}. Rendu WebAssembly.",
- "renderer_popover_micron_wasm_pending_tail": " {version} est indisponible ou encore en chargement ; utilisation de micron-parser (JavaScript).",
+ "renderer_popover_micron_wasm_pending_tail": " {version} est en cours de chargement ou indisponible. Utilisation de la version standard.",
+ "renderer_switch_title": "Analyseur",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
"renderer_chip_plaintext": "Text",
@@ -1683,7 +1684,7 @@
"move_down": "Descendre",
"remove_rule": "Supprimer la règle",
"terms_label": "Termes ou motifs",
- "terms_placeholder": "Un par ligne ou séparés par des virgules. Sous-chaînes insensibles à la casse. Regex : un motif par ligne ; les motifs invalides sont retirés à l’enregistrement.",
+ "terms_placeholder": "Un par ligne ou séparé par des virgules. La recherche n'est pas sensible à la casse. Vous pouvez également utiliser des expressions régulières (une par ligne).",
"match_targets_label": "Correspondre dans",
"match_peer_fields": "Nom affiché du pair, nom personnalisé, champs contact",
"match_message": "Titre et corps du message (si disponibles)",
@@ -1726,7 +1727,7 @@
"repository_server": {
"title": "Serveur de dépôt",
"description": "Redistribuez les wheels Python MeshChatX et de l'écosystème Reticulum, ainsi que vos propres fichiers, en HTTP clair pour que d'autres sur votre réseau ou sur cet appareil puissent les télécharger.",
- "subtitle": "En ligne : actualisez le jeu de wheels fourni ; ajoutez vos fichiers quand vous voulez ; ouvrez une petite page de téléchargement dans l'application ou utilisez le serveur HTTP auxiliaire.",
+ "subtitle": "Actualisez les packages logiciels inclus, ajoutez vos propres fichiers ou lancez une page de téléchargement pour d'autres appareils.",
"back_tools": "Back to tools",
"http_heading": "Plain HTTP mirror",
"host_label": "Listen address",
@@ -1920,14 +1921,14 @@
"serial": {
"title": "USB serial is unavailable",
"polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
- "android_webview_no_serial": "Android WebView does not expose Web Serial; use the desktop browser or wait for the bundled flasher.",
+ "android_webview_no_serial": "Android ne prend pas en charge Web Serial dans cette vue. Utilisez un navigateur de bureau ou le flasher intégré.",
"browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
"android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
"unknown": "USB serial cannot be initialised in this environment."
},
"bluetooth": {
"title": "Bluetooth is unavailable",
- "android_bridge_not_implemented": "Web Bluetooth is unavailable in this WebView; use Bluetooth from the OS or a different browser.",
+ "android_bridge_not_implemented": "Web Bluetooth n'est pas disponible ici. Utilisez les paramètres Bluetooth du système ou un autre navigateur.",
"browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
"insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
"requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
@@ -2114,7 +2115,7 @@
"heard_title_short": "RNGit · {prefix}",
"unnamed_node": "Nœud RNGit",
"hops_label": "Sauts : {n}",
- "intro": "RNGit n'a pas d'index global : collez des noms de dépôt candidats (un par ligne). MeshChatX tente une liste de refs distante pour chacun ; les dépôts joignables affichent une ligne git clone à copier. L'application n'héberge ni ne récupère les données git.",
+ "intro": "Collez les noms des dépôts (un par ligne) pour les trouver sur le réseau. Les dépôts joignables afficheront une commande clone à copier. Cette application ne stocke aucune donnée git.",
"destination_hash": "Hachage de destination RNGit (32 hex)",
"group_name": "Groupe (configuration rngit)",
"repo_names_label": "Noms de dépôt à tester",
@@ -2134,7 +2135,7 @@
"copy_failed": "Copie impossible",
"refs_preview": "Refs (aperçu)",
"truncated": "(tronqué)",
- "no_clone_hint": "Pas de ligne clone pour les noms inaccessibles ; corrigez l'accès ou l'orthographe sur le serveur rngit.",
+ "no_clone_hint": "Aucune commande clone disponible pour les noms inaccessibles. Vérifiez l'orthographe ou votre connexion.",
"experimental_footer": "Expérimental : les outils RNGit peuvent évoluer sans préavis."
},
"rnprobe": {
@@ -2636,9 +2637,9 @@
"action_falling_skies": "Ciel de chute",
"action_falling_skies_desc": "Déposer de nouveaux nœuds graphiques à partir du haut du visualisateur",
"action_snake": "Serpent de Mesh",
- "action_snake_desc": "Mangez chaque noeud; votre queue est les nœuds que vous collectez",
+ "action_snake_desc": "Mangez chaque nœud. Votre queue grandit avec chaque nœud collecté.",
"action_pong": "Mesh Pong",
- "action_pong_desc": "Vous vs AI; score en haut",
+ "action_pong_desc": "Vous contre l'IA. Le score est affiché en haut.",
"action_getting_started": "Commencer",
"action_getting_started_desc": "Ouvrir le guide de configuration",
"action_changelog": "Changer de journal",

diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index 116bccd7..798d7fe5 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -48,7 +48,7 @@
"view_process_log": "Log di processo (debug)",
"process_log_title": "Log di processo del bot",
"process_log_empty": "Nessun output di log per questo bot.",
- "process_log_truncated": "Viene mostrata solo la fine del log; il file su disco è più grande.",
+ "process_log_truncated": "Viene mostrata solo la fine del log. Il file completo su disco è più grande.",
"process_log_loading": "Caricamento log…",
"process_log_failed": "Impossibile caricare il log di processo",
"process_log_copied": "Log copiato negli appunti",
@@ -111,9 +111,9 @@
"messages_sidebar_position_left": "Sinistra",
"messages_sidebar_position_right": "Destra",
"ui_transparency": "Trasparenza dello sfondo",
- "ui_transparency_description": "Aumenta la trasparenza dello sfondo principale. I pannelli laterali restano opachi.",
+ "ui_transparency_description": "Aumenta la trasparenza dello sfondo principale. I pannelli laterali rimangono solidi per la leggibilità.",
"ui_glass_enabled": "Effetto vetro",
- "ui_glass_enabled_description": "Sfocatura vetro sulle schede stile glass. Disattivato: superfici solide.",
+ "ui_glass_enabled_description": "Aggiunge un effetto sfocato alle schede. Quando è disattivato, le schede usano colori solidi.",
"reset_appearance_defaults": "Ripristina aspetto predefinito",
"light_theme": "Tema Chiaro",
"dark_theme": "Tema Scuro",
@@ -125,12 +125,12 @@
"transport_toggle_description": "Inoltra annunci, rispondi alle richieste di percorso e aiuta la tua mesh a rimanere online.",
"requires_restart": "Richiede il riavvio dopo la modifica.",
"show_community_interfaces": "Mostra Interfacce della Comunità",
- "community_interfaces_description": "Mostra i preset mantenuti dalla comunità quando aggiungi nuove interfacce.",
+ "community_interfaces_description": "Mostra i preset mantenuti dalla comunità quando si aggiungono nuove interfacce.",
"reliability": "Affidabilità",
"lxmf_settings_eyebrow": "LXMF",
"privacy_eyebrow": "Privacy",
"privacy_data_title": "Dati e dispositivo",
- "privacy_data_description": "Cronologia locale, telemetria verso peer attendibili. L'eliminazione riguarda solo questo dispositivo.",
+ "privacy_data_description": "Gestisci la cronologia dei messaggi locali, la telemetria e altre opzioni di privacy. L'eliminazione qui influisce solo su questo dispositivo.",
"privacy_data": "Dati e dispositivo",
"privacy_subsection_device": "Questo dispositivo",
"privacy_subsection_telemetry": "Telemetria mesh",
@@ -143,11 +143,11 @@
"auto_fallback_title": "Fallback automatico al nodo di propagazione",
"auto_fallback_description": "Le consegne dirette fallite vengono messe in coda sul tuo nodo di propagazione preferito.",
"inbound_stamps_required_title": "Richiedi francobolli in entrata",
- "inbound_stamps_required_description": "Se disattivato, i messaggi LXMF diretti verso di te non richiedono francobolli proof-of-work. Se attivato, imposta il costo sotto (più alto = più lavoro per i mittenti).",
+ "inbound_stamps_required_description": "Quando è disattivato, i messaggi diretti a te non richiedono timbri proof-of-work. Quando è attivato, imposta il costo del timbro qui sotto. Valori più alti significano più lavoro per i mittenti.",
"inbound_stamp_cost": "Costo Francobollo Messaggio in Entrata",
- "inbound_stamp_description": "Difficoltà proof-of-work per la consegna diretta quando i francobolli in entrata sono attivi. Intervallo: 1-254. Predefinito: 8.",
+ "inbound_stamp_description": "Difficoltà proof-of-work per i messaggi diretti. Intervallo: 1-254. Predefinito: 8.",
"local_message_auto_delete_title": "Elimina messaggi vecchi su questo dispositivo",
- "local_message_auto_delete_description": "Rimuove i messaggi dal database locale dopo l'età impostata. Vale solo per questo dispositivo. Gli altri tengono le proprie copie. Nessuna eliminazione viene inviata alla rete.",
+ "local_message_auto_delete_description": "Rimuove i messaggi dal database locale dopo il tempo impostato. Questo influisce solo su questo dispositivo e nessun dato viene eliminato dalla rete.",
"local_message_auto_delete_age": "Elimina messaggi più vecchi di",
"local_message_auto_delete_unit_aria": "Unità di tempo per la conservazione",
"local_message_auto_delete_unit_days": "giorni",
@@ -181,7 +181,7 @@
"last_synced": "Ultima sincronizzazione {time} fa.",
"last_synced_never": "Ultima sincronizzazione: mai.",
"propagation_stamp_cost": "Costo Francobollo Nodo di Propagazione",
- "propagation_stamp_description": "Richiedi francobolli proof-of-work per i messaggi propagati attraverso il tuo nodo. Valori più alti richiedono più lavoro computazionale. Intervallo: 13-254. Predefinito: 16. **Nota:** La modifica richiede il riavvio dell'app.",
+ "propagation_stamp_description": "Richiede timbri proof-of-work per i messaggi inviati tramite il tuo nodo. Valori più alti richiedono più lavoro. Intervallo: 13-254. Predefinito: 16. **Nota:** La modifica richiede un riavvio.",
"language": "Lingua",
"select_language": "Seleziona la tua lingua preferita.",
"tagline": "Client Reticulum tutto in uno",
@@ -222,9 +222,9 @@
"message_font_size": "Dimensione carattere messaggi",
"message_icon_size": "Dimensione icona",
"detailed_outbound_send_status": "Stato invio in uscita dettagliato",
- "detailed_outbound_send_status_description": "Mostra stile percorso, spinner e tooltip tecnici durante l'invio. Se disattivato, viene mostrata una sola spunta attenuata fino a escalation dopo alcuni secondi.",
+ "detailed_outbound_send_status_description": "Mostra lo stato dettagliato come la ricerca del percorso e i suggerimenti tecnici durante l'invio. Quando è disattivato, viene mostrata una semplice spunta.",
"message_timestamp_grouping": "Raggruppa timestamp messaggi",
- "message_timestamp_grouping_description": "Se attivo, la chat mostra intestazioni data e raggruppa l'ora su un fumetto per blocco. Se disattivo, ogni messaggio mostra l'ora e le bolle data sono nascoste.",
+ "message_timestamp_grouping_description": "Quando è attivato, i messaggi sono raggruppati per data e i timestamp sono semplificati. Quando è disattivato, ogni messaggio mostra l'ora esatta.",
"search_settings": "Cerca impostazioni...",
"auto_resend": "Invio Automatico",
"retry_attachments": "Riprova Allegati",
@@ -241,9 +241,9 @@
"stranger_protection": "Protezione Sconosciuti",
"stranger_protection_description": "Controlla come l'app gestisce messaggi e allegati da peer sconosciuti.",
"block_stranger_attachments": "Blocca allegati da sconosciuti",
- "block_stranger_attachments_description": "Rimuovi automaticamente file, immagini e allegati audio da peer non presenti nei tuoi contatti. I messaggi di testo vengono comunque consegnati.",
+ "block_stranger_attachments_description": "Rimuove automaticamente gli allegati (file, immagini e audio) dalle persone non presenti nei tuoi contatti. I messaggi di testo vengono comunque consegnati.",
"block_all_from_strangers": "Blocca tutto dagli sconosciuti",
- "block_all_from_strangers_description": "Scarta silenziosamente tutti i messaggi, allegati e chiamate da peer non presenti nei tuoi contatti. Nulla viene consegnato o salvato.",
+ "block_all_from_strangers_description": "Ignora tutti i messaggi, gli allegati e le chiamate dalle persone non presenti nei tuoi contatti. Nulla viene consegnato o salvato.",
"show_unknown_contact_banner": "Mostra avviso per contatti sconosciuti",
"show_unknown_contact_banner_description": "Se attivo, in cima alle conversazioni con peer non presenti nei contatti viene mostrato un avviso.",
"warn_on_stranger_links": "Avvisa prima di aprire link da sconosciuti",
@@ -259,7 +259,7 @@
"desktop_open_calls_in_separate_window": "Apri Chiamate in 2ª Finestra",
"desktop_open_calls_in_separate_window_description": "Quando una chiamata è attiva, verrà mostrata in una finestra popup separata invece che all'interno dell'app.",
"desktop_hardware_acceleration_enabled": "Accelerazione Hardware",
- "desktop_hardware_acceleration_enabled_description": "Disabilita se riscontri sfarfallio dell'interfaccia utente, schermi neri o glitch grafici.",
+ "desktop_hardware_acceleration_enabled_description": "Disattiva questa opzione se riscontri sfarfallio dell'interfaccia utente, schermi neri o altri problemi grafici.",
"translator": "Traduttore",
"translator_enabled": "Abilita Traduttore",
"translator_description": "Abilita le funzioni di traduzione nelle conversazioni.",
@@ -307,9 +307,9 @@
"blackhole_integration_enabled": "Integrazione Blackhole",
"blackhole_integration_description": "Metti automaticamente in blackhole le identità a livello di trasporto Reticulum quando esili gli utenti in MeshChatX.",
"announce_limits": "Limiti annunci",
- "announce_limits_description": "Limita quanti annunci restano nel database per aspetto (si eliminano i più vecchi) e quanti vengono caricati per richiesta API. Limita anche ricerca e interfacce scoperte. Svuota un campo e salva per i default.",
+ "announce_limits_description": "Limita il numero di annunci conservati nel database e quanti ne vengono caricati contemporaneamente. Cancella un campo e salva per ripristinare i valori predefiniti.",
"announce_store_heading": "Memorizza annunci in arrivo",
- "announce_store_description": "Se disattivato, gli annunci di quel tipo non vengono salvati nel database. Non influisce su rete o annunci propri. Un nodo pagina NomadNet locale resta in elenco anche con NomadNet disattivato.",
+ "announce_store_description": "Se disattivato, gli annunci di questo tipo non vengono salvati. Questo influisce solo sull'archiviazione e non ferma la rete o i propri annunci. Il nodo NomadNet locale rimarrà comunque in elenco.",
"announce_store_lxmf": "LXMF (lxmf.delivery)",
"announce_store_lxst": "LXST telefonia (lxst.telephony)",
"announce_store_nomad": "Nodi NomadNet (nomadnetwork.node)",
@@ -325,7 +325,7 @@
"announce_limit_nomadnet": "NomadNet",
"announce_limit_prop": "Nodi prop",
"csp_settings": "Content Security Policy (CSP)",
- "csp_description": "Aggiungi manualmente domini e sorgenti consentiti per vari tipi di risorse. Utile per server di tile personalizzati, bot o integrazioni esterne.",
+ "csp_description": "Aggiungi manualmente domini consentiti per varie risorse. Utile per server di mappe personalizzati, bot o integrazioni esterne.",
"csp_extra_connect_src": "Sorgenti di Connessione Extra",
"csp_extra_connect_src_description": "Sorgenti aggiuntive per connessioni fetch/websocket (es. https://api.example.com).",
"csp_extra_img_src": "Sorgenti Immagine Extra",
@@ -346,7 +346,7 @@
"location_manual_lon": "Longitudine",
"location_manual_alt": "Altitudine (m)",
"telemetry_enabled": "Telemetria abilitata",
- "telemetry_description": "Consenti a MeshChatX di inviare e ricevere dati telemetrici. Ciò include la risposta alle richieste di posizione da parte di peer fidati.",
+ "telemetry_description": "Consente a MeshChatX di inviare e ricevere dati di telemetria, come rispondere alle richieste di posizione da parte di contatti fidati.",
"telemetry_trusted_peers": "Peer Telemetrici Fidati",
"telemetry_no_trusted_peers": "Nessun peer fidato configurato. Fidati dei peer dal menu della chat per consentire loro di richiedere la tua posizione.",
"telemetry_revoke_trust": "Revoca Fiducia",
@@ -397,7 +397,7 @@
},
"stickers": {
"settings_title": "Sticker",
- "settings_description": "Immagini salvate per questa identità. Usale nel compositore o salva immagini dalle chat. Esporta o importa un backup JSON.",
+ "settings_description": "Le tue immagini salvate per questa identità. Usale nei messaggi o salva le immagini dalle chat. Puoi anche esportare o importare un backup.",
"export": "Esporta sticker",
"import": "Importa sticker",
"export_done": "Sticker esportati",
@@ -433,7 +433,7 @@
"file_too_large_video": "Gli sticker video WEBM devono essere di 256 KB o meno.",
"invalid_dimensions": "Gli sticker devono essere al massimo 512×512 pixel con un lato esattamente 512.",
"invalid_duration": "Sticker animati e video: durata massima 3 secondi.",
- "invalid_fps": "Sticker animati: 30–60 FPS; video: fino a 30 FPS.",
+ "invalid_fps": "Sticker animati: 30–60 FPS. Video: fino a 30 FPS.",
"invalid_codec": "Gli sticker video devono usare il codec VP9.",
"invalid_audio": "Gli sticker video non devono contenere audio.",
"invalid_tgs": "Impossibile leggere l'animazione TGS.",
@@ -511,7 +511,7 @@
"title": "Editor sticker",
"create_button": "Crea sticker",
"processing": "Elaborazione...",
- "canvas_hint": "Anteprima ridimensionata; l'esportazione usa un canvas 512×512.",
+ "canvas_hint": "L'anteprima è ridimensionata. L'esportazione usa una tela 512×512.",
"section_source": "Origine",
"choose_image": "Scegli immagine",
"section_transform": "Trasformazione",
@@ -581,7 +581,7 @@
},
"gifs": {
"settings_title": "GIF",
- "settings_description": "La tua libreria personale di GIF per questa identità. Carica file GIF e WebP animati e riutilizzali rapidamente nelle chat. Le GIF più usate appaiono per prime.",
+ "settings_description": "La tua libreria GIF personale. Carica file GIF e WebP animati per riutilizzarli nelle chat. Le GIF più usate vengono mostrate per prime.",
"export": "Esporta GIF",
"import": "Importa GIF",
"export_done": "GIF esportate",
@@ -920,7 +920,7 @@
"backbone_transport_identity_placeholder": "e53433e51cde34c42a3245ba3fe1ad69",
"backbone_transport_identity_hint": "Come gli esempi backbone remoti Reticulum con solo remote e target_port. Usa l'hash se operatore o directory lo indicano.",
"loopback_local_title": "Locale / loopback",
- "loopback_local_body": "Reticulum usa LocalClientInterface internamente per l'istanza condivisa; non c'\u00e8 un modulo loopback separato come TCP Client. Per raggiungere un altro processo RNS su questo host usa TCP Client su 127.0.0.1 e la porta dell'istanza, oppure installa un modulo interfaccia esterno (ad esempio MyInterface.py) in interfacepath.",
+ "loopback_local_body": "Reticulum usa un'istanza condivisa internamente. Per comunicare con un altro processo RNS su questo host, usa un Client TCP su 127.0.0.1 con la porta dell'istanza, oppure usa un modulo di interfaccia esterno.",
"loopback_local_docs_hint": "Vedi il capitolo Interfaces per i tipi supportati.",
"loopback_local_docs_link": "Apri il manuale Reticulum incluso",
"custom_external_intro": "Tipi come WeaveInterface o personalizzati si caricano se Reticulum trova un file modulo corrispondente (TypeName.py) in interfacepath con interface_class (caricatore esterno RNS). Le opzioni JSON si uniscono alla sezione interface nel file di configurazione.",
@@ -965,12 +965,12 @@
"discovered_no_config": "Questo annuncio non includeva un blocco di configurazione pronto da incollare.",
"discovered_prefill_applied": "Campi precompilati dall'interfaccia rilevata.",
"rnode_ble_toggle": "Bluetooth LE (RNode UART)",
- "rnode_ble_hint": "Reticulum usa il BLE tramite bleak sul dispositivo che esegue MeshChatX. Associare o accoppiare prima l'RNode nel sistema. Solo browser o interfaccia remota non possono collegare il BLE a Reticulum; usare Electron, Linux, macOS, Windows o l'app Android, dove Python integrato include bleak. Su Android valgono come sempre accoppiamento, hardware e richieste di permesso del sistema.",
+ "rnode_ble_hint": "Reticulum usa il Bluetooth su questo dispositivo. Associa l'RNode nelle impostazioni del sistema operativo. Richiede l'app Desktop o Android. Su Android, è necessario concedere i permessi richiesti.",
"rnode_ble_peer_label": "Nome BLE o MAC",
"rnode_ble_peer_placeholder": "MyRNode o aa:bb:cc:dd:ee:ff",
"rnode_ble_peer_required": "Inserire il nome annunciato o il MAC dell'RNode.",
"rnode_ip_host_label": "Nome host o indirizzo IP",
- "rnode_tcp_port_fixed_hint": "Reticulum usa la porta TCP 7633 sull'RNode; inserire solo host o IP (senza :porta).",
+ "rnode_tcp_port_fixed_hint": "Reticulum usa la porta 7633 sull'RNode. Inserisci solo l'host o l'IP senza la porta.",
"rnode_tcp_host_required": "Inserire host o IP per l'RNode via TCP.",
"listen_ip_required": "L'IP di ascolto è obbligatoria.",
"kernel_iface_picker_title": "Interfacce su questo host",
@@ -1115,7 +1115,7 @@
"export_region_oceania": "Oceania",
"vector_exchange_title": "GeoJSON / KML / KMZ",
"vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
- "vector_exchange_hint": "Imports support icons via mcx_icon_href, mcx_icon_data_url (data URIs), Mapbox simplestyle marker-color, and KML/KMZ IconStyle. KMZ packs KML with embedded images. Name, description, and extra properties import/export with GeoJSON and KML; select a drawing to see metadata above it.",
+ "vector_exchange_hint": "L'importazione supporta icone da vari formati inclusi GeoJSON e KML. Seleziona un disegno per vederne i metadati.",
"vector_import_geojson": "Import GeoJSON",
"vector_import_kml": "Import KML",
"vector_import_kmz": "Import KMZ",
@@ -1261,7 +1261,7 @@
"raw_path_value_unknown": "Sconosciuto",
"raw_path_finding_measure": "Pathfinding all'invio (in uscita)",
"raw_path_row_hash_rnpath": "Hash tabella percorsi (rnpath)",
- "raw_path_row_hash_rnpath_hint": "Uguale all'hash di destinazione usato da Reticulum per questa route; cercalo nella tabella percorsi rnpath.",
+ "raw_path_row_hash_rnpath_hint": "L'hash di destinazione usato da Reticulum per questo percorso. Puoi trovarlo nella tabella dei percorsi.",
"copy_message": "Copia messaggio",
"message_copied": "Messaggio copiato",
"failed_copy_message": "Impossibile copiare il messaggio",
@@ -1353,7 +1353,7 @@
"forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
"forward_verify_show": "Source and verification",
"forward_verify_hide": "Hide verification",
- "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_explanation": "I link Paper LXMF funzionano solo se il messaggio completo è disponibile e rientra nei limiti di Paper. Le citazioni possono essere falsificate.",
"forward_verify_loading": "Looking up verification URI…",
"forward_verify_open_uri": "Open verification URI",
"forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
@@ -1387,7 +1387,7 @@
"nomad_micron_wasm_title": "Micron (WASM)",
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
- "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
+ "nomad_micron_wasm_desc_after_link": ") per le pagine Nomad Network. Se disattivata o non supportata, viene usata la versione standard."
},
"debug": {
"title": "Log di Debug",
@@ -1548,10 +1548,11 @@
"renderer_chip_micron_wasm": "Micron WASM",
"renderer_hint_micron_js": "micron-parser (JavaScript)",
"renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
- "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_hint_micron_wasm_pending": "Versione veloce in caricamento o non disponibile. Utilizzo della versione standard.",
"renderer_popover_micron_wasm_powered": "Basato su ",
"renderer_popover_micron_wasm_active_tail": " {version}. Renderer WebAssembly.",
- "renderer_popover_micron_wasm_pending_tail": " {version} non è disponibile o è ancora in caricamento; si usa micron-parser (JavaScript).",
+ "renderer_popover_micron_wasm_pending_tail": " {version} è in caricamento o non disponibile. Utilizzo della versione standard.",
+ "renderer_switch_title": "Parser",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
"renderer_chip_plaintext": "Text",
@@ -1643,7 +1644,7 @@
"licenses": {
"section_label": "Note legali",
"title": "Licenze di terze parti",
- "description": "Versioni, autori e licenze SPDX o dichiarate delle dipendenze a runtime. I dati provengono dall'ambiente Python installato. Per il frontend si usa pnpm se funziona; altrimenti i pacchetti si leggono da node_modules (ad es. se pnpm licenses fallisce sul lockfile).",
+ "description": "Versioni, autori e licenze SPDX o dichiarate delle dipendenze a runtime. I dati provengono dall'ambiente Python installato. Per il frontend si usa pnpm se funziona. Altrimenti i pacchetti si leggono da node_modules (ad es. se pnpm licenses fallisce sul lockfile).",
"short_description": "Versioni, autori e licenze per backend e frontend.",
"search_placeholder": "Cerca pacchetti, versioni, autori, licenze...",
"generated_at": "Generato alle {time}",
@@ -1682,7 +1683,7 @@
},
"rnpath": {
"title": "RNPath",
- "description": "Ispeziona percorsi e code di annuncio; richiedi o elimina route.",
+ "description": "Ispeziona percorsi e code di annuncio. Richiedi o elimina route.",
"failed_fetch": "Impossibile recuperare i dati del percorso",
"path_dropped": "Percorso eliminato",
"failed_drop": "Impossibile eliminare il percorso",
@@ -1735,7 +1736,7 @@
"move_down": "Sposta giù",
"remove_rule": "Rimuovi regola",
"terms_label": "Termini o pattern",
- "terms_placeholder": "Uno per riga o separati da virgola. Sottostringhe senza distinzione maiuscole/minuscole. Regex: un pattern per riga; quelli non validi vengono rimossi al salvataggio.",
+ "terms_placeholder": "Uno per riga o separati da virgola. La ricerca non distingue tra maiuscole e minuscole. Puoi anche usare espressioni regolari (una per riga).",
"match_targets_label": "Confronta in",
"match_peer_fields": "Nome visualizzato del peer, nome personalizzato, campi contatto",
"match_message": "Titolo e corpo del messaggio (se presenti)",
@@ -1778,7 +1779,7 @@
"repository_server": {
"title": "Server repository",
"description": "Ridistribuisci le wheel Python di MeshChatX e dell'ecosistema Reticulum, più i tuoi file, su HTTP in chiaro così altri sulla tua rete o su questo dispositivo possono scaricarli.",
- "subtitle": "Se connessi aggiorna il set di wheel inclusi; aggiungi file quando vuoi; apri una piccola pagina di download dall'app o usa il server HTTP separato.",
+ "subtitle": "Aggiorna i pacchetti software inclusi, aggiungi i tuoi file o avvia una pagina di download per altri dispositivi.",
"back_tools": "Back to tools",
"http_heading": "Plain HTTP mirror",
"host_label": "Listen address",
@@ -1972,14 +1973,14 @@
"serial": {
"title": "USB serial is unavailable",
"polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
- "android_webview_no_serial": "Android WebView does not expose Web Serial; use the desktop browser or wait for the bundled flasher.",
+ "android_webview_no_serial": "Android non supporta Web Serial in questa vista. Usa un browser desktop o il flasher integrato.",
"browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
"android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
"unknown": "USB serial cannot be initialised in this environment."
},
"bluetooth": {
"title": "Bluetooth is unavailable",
- "android_bridge_not_implemented": "Web Bluetooth is unavailable in this WebView; use Bluetooth from the OS or a different browser.",
+ "android_bridge_not_implemented": "Web Bluetooth non è disponibile qui. Usa le impostazioni Bluetooth del sistema o un browser diverso.",
"browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
"insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
"requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
@@ -2166,7 +2167,7 @@
"heard_title_short": "RNGit · {prefix}",
"unnamed_node": "Nodo RNGit",
"hops_label": "Salti: {n}",
- "intro": "RNGit non ha un indice globale: incolla nomi di repository candidati (uno per riga). MeshChatX prova un elenco refs remoto per ciascuno; i repository raggiungibili mostrano una riga git clone da copiare. L'app non ospita né scarica dati git.",
+ "intro": "Incolla i nomi dei repository (uno per riga) per trovarli sulla rete. I repo raggiungibili mostreranno un comando clone da copiare. Questa app non memorizza dati git.",
"destination_hash": "Hash destinazione RNGit (32 hex)",
"group_name": "Gruppo (config rngit)",
"repo_names_label": "Nomi repository da provare",
@@ -2186,7 +2187,7 @@
"copy_failed": "Impossibile copiare",
"refs_preview": "Refs (anteprima)",
"truncated": "(troncato)",
- "no_clone_hint": "Nessuna riga clone per nomi irraggiungibili; correggi accesso o ortografia sul server rngit.",
+ "no_clone_hint": "Nessun comando clone disponibile per i nomi non raggiungibili. Controlla il nome o la tua connessione.",
"experimental_footer": "Sperimentale: gli strumenti RNGit possono cambiare senza preavviso."
},
"rnprobe": {
@@ -2636,9 +2637,9 @@
"action_falling_skies": "Falling Skies",
"action_falling_skies_desc": "Nuovi nodi cadono dall'alto nel visualizzatore",
"action_snake": "Mesh Snake",
- "action_snake_desc": "Mangia ogni nodo; la coda sono i nodi raccolti",
+ "action_snake_desc": "Mangia ogni nodo. La tua coda cresce con ogni nodo raccolto.",
"action_pong": "Mesh Pong",
- "action_pong_desc": "Tu contro IA; punteggio in alto",
+ "action_pong_desc": "Tu contro l'IA. Il punteggio è mostrato in alto.",
"action_getting_started": "Guida Introduttiva",
"action_getting_started_desc": "Apri la guida di configurazione",
"action_changelog": "Changelog",

diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json
index af46e6d6..b6fcda9a 100644
--- a/meshchatx/src/frontend/locales/nl.json
+++ b/meshchatx/src/frontend/locales/nl.json
@@ -48,7 +48,7 @@
"view_process_log": "Proceslog (debug)",
"process_log_title": "Bot-proceslog",
"process_log_empty": "Nog geen loguitvoer voor deze bot.",
- "process_log_truncated": "Alleen het einde van het logbestand wordt getoond; het bestand op schijf is groter.",
+ "process_log_truncated": "Alleen het einde van het logbestand wordt getoond. Het bestand op schijf is groter.",
"process_log_loading": "Log laden…",
"process_log_failed": "Proceslog kon niet worden geladen",
"process_log_copied": "Log naar klembord gekopieerd",
@@ -111,9 +111,9 @@
"messages_sidebar_position_left": "Links",
"messages_sidebar_position_right": "Rechts",
"ui_transparency": "Achtergrondtransparantie",
- "ui_transparency_description": "Verhoogt de doorzichtigheid van de hoofdachtergrond. Zijpanelen blijven solide voor leesbaarheid.",
+ "ui_transparency_description": "Verhoogt de transparantie van de hoofdachtergrond. Zijpanelen blijven ondoorzichtig voor de leesbaarheid.",
"ui_glass_enabled": "Glazen effect",
- "ui_glass_enabled_description": "Vervaging op glazen kaarten. Wanneer uit, kaarten gebruiken vaste oppervlakken.",
+ "ui_glass_enabled_description": "Voegt een matglas-effect toe aan kaarten. Wanneer uitgeschakeld, gebruiken kaarten effen kleuren.",
"reset_appearance_defaults": "Het uiterlijk terugzetten naar standaardinstellingen",
"light_theme": "Lichtthema",
"dark_theme": "Donker thema",
@@ -125,12 +125,12 @@
"transport_toggle_description": "Route announce, beantwoordt padverzoeken en helpt je mesh online te houden.",
"requires_restart": "Vereist herstart na schakelen.",
"show_community_interfaces": "Community-interfaces tonen",
- "community_interfaces_description": "Toon door de community onderhouden interface-presets bij het toevoegen van nieuwe interfaces.",
+ "community_interfaces_description": "Toon door de gemeenschap onderhouden presets bij het toevoegen van nieuwe interfaces.",
"reliability": "Betrouwbaarheid",
"lxmf_settings_eyebrow": "LXMF",
"privacy_eyebrow": "Privacy",
"privacy_data_title": "Data en apparaat",
- "privacy_data_description": "Lokale berichtengeschiedenis, telemetrie naar vertrouwde peers. Verwijderen geldt alleen voor dit apparaat.",
+ "privacy_data_description": "Beheer de lokale berichtgeschiedenis, telemetrie en andere privacyopties. Verwijderen hier heeft alleen invloed op dit apparaat.",
"privacy_data": "Data en apparaat",
"privacy_subsection_device": "Dit apparaat",
"privacy_subsection_telemetry": "Mesh-telemetrie",
@@ -143,11 +143,11 @@
"auto_fallback_title": "Automatisch terugvallen naar propagatieknooppunt",
"auto_fallback_description": "Foute directe leveringen worden in de wachtrij geplaatst op uw voorkeursknoop.",
"inbound_stamps_required_title": "Vereiste inkomende stempels",
- "inbound_stamps_required_description": "Wanneer uit, directe LXMF berichten aan u hebben geen proof-of-work stempels nodig. Stel de postzegelkosten hieronder in (hoger betekent meer werk voor afzenders).",
+ "inbound_stamps_required_description": "Wanneer uitgeschakeld, vereisen directe berichten aan u geen proof-of-work stempels. Wanneer ingeschakeld, stelt u de stempelkosten hieronder in. Hogere waarden betekenen meer werk voor afzenders.",
"inbound_stamp_cost": "Inkomende postzegelkosten",
- "inbound_stamp_description": "Proof-of-work moeilijkheid voor directe levering berichten wanneer inkomende stempels zijn vereist. Bereik: 1-254. Standaard: 8.",
+ "inbound_stamp_description": "Proof-of-work moeilijkheid voor directe berichten. Bereik: 1-254. Standaard: 8.",
"local_message_auto_delete_title": "Oude berichten op dit apparaat verwijderen",
- "local_message_auto_delete_description": "Verwijdert berichten uit de lokale database na de ingestelde leeftijd. Geldt alleen voor dit apparaat. Anderen houden hun eigen kopieën. Er gaat geen verwijdering de netwerk op.",
+ "local_message_auto_delete_description": "Verwijdert berichten uit de lokale database na de door u ingestelde tijd. Dit heeft alleen invloed op dit apparaat en er worden geen gegevens van het netwerk verwijderd.",
"local_message_auto_delete_age": "Berichten verwijderen die ouder zijn dan",
"local_message_auto_delete_unit_aria": "Tijdsduur voor bewaring",
"local_message_auto_delete_unit_days": "dagen",
@@ -181,7 +181,7 @@
"last_synced": "Laatst gesynchroniseerd {time} geleden.",
"last_synced_never": "Laatst gesynchroniseerd: nooit.",
"propagation_stamp_cost": "Propagatieknooppunt stempelkosten",
- "propagation_stamp_description": "Vereiste proof-of-work stempels voor berichten gepropageerd via uw knooppunt. Hogere waarden vereisen meer rekenwerk. Bereik: 13-254. Standaard: 16. **Opmerking:** Dit veranderen vereist het herstarten van de app.",
+ "propagation_stamp_description": "Vereis proof-of-work stempels for berichten die via uw knooppunt worden verzonden. Hogere waarden vereisen meer werk. Bereik: 13-254. Standaard: 16. **Opmerking:** Het wijzigen hiervan vereist een herstart.",
"language": "Taal",
"select_language": "Selecteer uw gewenste taal.",
"tagline": "Alles-in-één klant van Reticulum",
@@ -222,9 +222,9 @@
"message_font_size": "Grootte berichtlettertype",
"message_icon_size": "Pictogramgrootte",
"detailed_outbound_send_status": "Gedetailleerde uitgaande verzendstatus",
- "detailed_outbound_send_status_description": "Toon pathfinding styling, spinners en technische tooltips terwijl een bericht wordt verzonden. Wanneer uit, een enkele gedempte controle wordt getoond tot het verzenden duurt een paar seconden.",
+ "detailed_outbound_send_status_description": "Toon gedetailleerde status zoals padvinden en technische tooltips tijdens het verzenden. Wanneer uitgeschakeld, wordt een eenvoudig vinkje getoond.",
"message_timestamp_grouping": "Tijdstempels groeperen",
- "message_timestamp_grouping_description": "Indien aan toont de chat datumkoppen en één tijd per reeks bellen. Indien uit toont elk bericht de tijd en verdwijnen datumbellen.",
+ "message_timestamp_grouping_description": "Wanneer ingeschakeld, worden berichten gegroepeerd op datum en worden tijdstempels vereenvoudigd. Wanneer uitgeschakeld, toont elk bericht zijn exacte tijd.",
"search_settings": "Zoekinstellingen...",
"auto_resend": "Automatisch opnieuw verzenden",
"retry_attachments": "Bijlagen opnieuw proberen",
@@ -241,9 +241,9 @@
"stranger_protection": "Bescherming van vreemdelingen",
"stranger_protection_description": "Bepaal hoe de app berichten en bijlagen van onbekende collega's behandelt.",
"block_stranger_attachments": "Blokbijlagen van vreemden",
- "block_stranger_attachments_description": "Verwijder automatisch bestand, afbeelding en audiobijlagen van collega's die niet in uw contacten staan. Sms'jes worden nog steeds bezorgd.",
+ "block_stranger_attachments_description": "Verwijder automatisch bestands-, afbeeldings- en audiobijlagen van mensen die niet in uw contacten staan. Tekstberichten worden nog steeds afgeleverd.",
"block_all_from_strangers": "Blokkeer alles van Vreemden",
- "block_all_from_strangers_description": "Stil alle berichten, bijlagen en oproepen van collega's die niet in uw contacten. Niets wordt geleverd of opgeslagen.",
+ "block_all_from_strangers_description": "Negeer alle berichten, bijlagen en oproepen van mensen die niet in uw contacten staan. Niets wordt afgeleverd of opgeslagen.",
"show_unknown_contact_banner": "Onbekende contactbanner tonen",
"show_unknown_contact_banner_description": "Indien ingeschakeld verschijnt er een bericht bovenaan gesprekken met collega's die niet in uw contacten staan.",
"warn_on_stranger_links": "Waarschuwen voor het openen van Vreemdelingenlinks",
@@ -309,7 +309,7 @@
"announce_limits": "Grenzen aankondigen",
"announce_limits_description": "Beperk hoeveel aankondigingen worden bewaard in de database per aspect (oudste verwijderd eerst) en hoeveel lading per API verzoek. Ook caps zoeken en ontdekt-interface payloads. Een numeriek veld wissen en opslaan om standaardwaarden te herstellen.",
"announce_store_heading": "Inkomende aankondigingen opslaan",
- "announce_store_description": "Uit: ontvangen aankondigingen van dat type worden niet in de database geschreven. Alleen opslag, niet het netwerk of je eigen aankondigingen. Een lokaal NomadNet-paginaknooppunt blijft zichtbaar als NomadNet-opslag uit staat.",
+ "announce_store_description": "Als dit uit staat, worden ontvangen aankondigingen van dit type niet opgeslagen. Dit heeft alleen invloed op de opslag en stopt het netwerk of je eigen aankondigingen niet. Je lokale NomadNet-knooppunt blijft in de lijst staan.",
"announce_store_lxmf": "LXMF (lxmf.delivery)",
"announce_store_lxst": "LXST-telefonie (lxst.telephony)",
"announce_store_nomad": "NomadNet-knopen (nomadnetwork.node)",
@@ -511,7 +511,7 @@
"title": "Sticker-editor",
"create_button": "Sticker aanmaken",
"processing": "Verwerken...",
- "canvas_hint": "Preview is geschaald om te passen; export gebruikt een 512×512 canvas.",
+ "canvas_hint": "De preview is geschaald. De export gebruikt een 512×512 canvas.",
"section_source": "Bron",
"choose_image": "Afbeelding kiezen",
"section_transform": "Transformeren",
@@ -868,7 +868,7 @@
"backbone_transport_identity_placeholder": "e53433e51cde34c42a3245ba3fe1ad69",
"backbone_transport_identity_hint": "Zoals Reticulum backbone remote-voorbeelden met alleen remote en target_port. Gebruik de hash wanneer een operator of directory die vermeldt.",
"loopback_local_title": "Lokaal / loopback",
- "loopback_local_body": "Reticulum gebruikt intern LocalClientInterface voor de gedeelde instantie; er is geen apart loopback-formulier zoals TCP Client. Voor een andere RNS op deze host: TCP Client naar 127.0.0.1 en de poort van de instantie, of installeer een extern interface-module (bijvoorbeeld MyInterface.py) in interfacepath.",
+ "loopback_local_body": "Reticulum gebruikt intern een gedeelde instantie. Om met een ander RNS-proces op deze host te communiceren, gebruik je een TCP-client naar 127.0.0.1 met de poort van de instantie, of een externe interface-module.",
"loopback_local_docs_hint": "Zie het hoofdstuk Interfaces voor ondersteunde types.",
"loopback_local_docs_link": "Gebundelde Reticulum-handleiding openen",
"custom_external_intro": "Typen zoals WeaveInterface worden geladen als Reticulum een passend modulebestand (TypeName.py) in interfacepath vindt met interface_class (externe loader RNS). JSON-opties worden samengevoegd in het interface-gedeelte van uw configuratie.",
@@ -913,12 +913,12 @@
"discovered_no_config": "Deze aankondiging bevatte geen kant-en-klaar configuratieblok.",
"discovered_prefill_applied": "Velden vooraf ingevuld vanuit ontdekte interface.",
"rnode_ble_toggle": "Bluetooth LE (RNode UART)",
- "rnode_ble_hint": "Reticulum gebruikt BLE via bleak op het apparaat waar MeshChatX draait. Koppel of verbind de RNode eerst in het besturingssysteem. Met alleen een browser of een externe UI kunt u geen BLE aan Reticulum koppelen; gebruik Electron, Linux, macOS, Windows of de Android-app, waar ingebed Python bleak bevat. Op Android gelden de gebruikelijke koppeling, hardware en machtigingsvragen van het OS.",
+ "rnode_ble_hint": "Reticulum gebruikt Bluetooth op dit apparaat. Koppel de RNode eerst in de instellingen van je besturingssysteem. Dit vereist de Desktop- of Android-app. Op Android moet je ook de vereiste machtigingen verlenen.",
"rnode_ble_peer_label": "BLE-naam of MAC",
"rnode_ble_peer_placeholder": "MyRNode of aa:bb:cc:dd:ee:ff",
"rnode_ble_peer_required": "Voer de aangekondigde naam of MAC van de RNode in.",
"rnode_ip_host_label": "Hostnaam of IP-adres",
- "rnode_tcp_port_fixed_hint": "Reticulum gebruikt TCP-poort 7633 op de RNode; alleen hostnaam of IP (geen :poort).",
+ "rnode_tcp_port_fixed_hint": "Reticulum gebruikt poort 7633 op de RNode. Voer alleen de hostnaam of het IP-adres in zonder de poort.",
"rnode_tcp_host_required": "Voer hostnaam of IP in voor RNode via TCP.",
"listen_ip_required": "Listen-IP is verplicht.",
"kernel_iface_picker_title": "Interfaces op deze host",
@@ -1063,7 +1063,7 @@
"export_region_oceania": "Oceania",
"vector_exchange_title": "GeoJSON / KML / KMZ",
"vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
- "vector_exchange_hint": "Imports support icons via mcx_icon_href, mcx_icon_data_url (data URIs), Mapbox simplestyle marker-color, and KML/KMZ IconStyle. KMZ packs KML with embedded images. Name, description, and extra properties import/export with GeoJSON and KML; select a drawing to see metadata above it.",
+ "vector_exchange_hint": "Import ondersteunt iconen uit verschillende formaten, waaronder GeoJSON en KML. Selecteer een tekening om de metadata te bekijken.",
"vector_import_geojson": "Import GeoJSON",
"vector_import_kml": "Import KML",
"vector_import_kmz": "Import KMZ",
@@ -1207,7 +1207,7 @@
"raw_path_value_unknown": "Onbekend",
"raw_path_finding_measure": "Pathfinding bij verzenden (uitgaand)",
"raw_path_row_hash_rnpath": "Padtabel-hash (rnpath)",
- "raw_path_row_hash_rnpath_hint": "Zelfde als de bestemmings-hash die Reticulum voor deze route gebruikte; zoek in de rnpath-padtabel.",
+ "raw_path_row_hash_rnpath_hint": "De bestemmings-hash die Reticulum voor deze route heeft gebruikt. Je kunt deze vinden in de padtabel.",
"copy_message": "Bericht kopiëren",
"message_copied": "Bericht gekopieerd",
"failed_copy_message": "Bericht kon niet worden gekopieerd",
@@ -1301,7 +1301,7 @@
"forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
"forward_verify_show": "Source and verification",
"forward_verify_hide": "Hide verification",
- "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_explanation": "Paper LXMF-links werken alleen als het volledige bericht beschikbaar is en binnen de Paper-limieten past. Geciteerde fragmenten kunnen worden vervalst.",
"forward_verify_loading": "Looking up verification URI…",
"forward_verify_open_uri": "Open verification URI",
"forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
@@ -1335,7 +1335,7 @@
"nomad_micron_wasm_title": "Micron (WASM)",
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
- "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
+ "nomad_micron_wasm_desc_after_link": ") voor Nomad Network-pagina's. Als dit is uitgeschakeld of niet wordt ondersteund, wordt de standaardversie gebruikt."
},
"debug": {
"title": "Debuglogs",
@@ -1496,10 +1496,11 @@
"renderer_chip_micron_wasm": "Micron WASM",
"renderer_hint_micron_js": "micron-parser (JavaScript)",
"renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
- "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_hint_micron_wasm_pending": "Snellere version wordt geladen of is niet beschikbaar. De standaardversie wordt gebruikt.",
"renderer_popover_micron_wasm_powered": "Aangedreven door ",
"renderer_popover_micron_wasm_active_tail": " {version}. WebAssembly-renderer.",
- "renderer_popover_micron_wasm_pending_tail": " {version} is niet beschikbaar of laadt nog; micron-parser (JavaScript) wordt gebruikt.",
+ "renderer_popover_micron_wasm_pending_tail": " {version} wordt geladen of is niet beschikbaar. De standaardversie wordt gebruikt.",
+ "renderer_switch_title": "Parser",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
"renderer_chip_plaintext": "Text",
@@ -1591,7 +1592,7 @@
"licenses": {
"section_label": "Juridisch",
"title": "Vergunningen van derden",
- "description": "Runtime afhankelijkheid versies, auteurs, en SPDX of verklaarde licentie strings. Gegevens worden verzameld uit de geïnstalleerde Python omgeving. Frontend data maakt gebruik van pnpm wanneer het werkt; anders worden pakketten gelezen van node modules (bijv. wanneer pnpm-licenties niet werken op het slotbestand).",
+ "description": "Runtime afhankelijkheid versies, auteurs, en SPDX of verklaarde licentie strings. Gegevens worden verzameld uit de geïnstalleerde Python omgeving. Frontend data maakt gebruik van pnpm wanneer het werkt. Anders worden pakketten gelezen van node modules (bijv. wanneer pnpm-licenties niet werken op het slotbestand).",
"short_description": "Afhankelijkheid versies, auteurs, en licenties voor backend en frontend.",
"search_placeholder": "Zoekpakketten, versies, auteurs, licenties...",
"generated_at": "Gegenereerd op{time}",
@@ -1671,7 +1672,7 @@
},
"sieve_filters": {
"title": "Zeeffilters",
- "description": "Tekst in peer-velden en/of berichttitel en -inhoud matchen; gesprek verbergen, geen meldingen, naar map verplaatsen of afzender verbannen (volledige blokkade).",
+ "description": "Tekst in peer-velden en/of berichttitel en -inhoud matchen. Gesprek verbergen, geen meldingen, naar map verplaatsen of afzender verbannen (volledige blokkade).",
"subtitle": "Regels worden in volgorde toegepast. Bereik kiest iedereen, alleen contacten of alleen niet-contacten. Deelstring of regex. De eerste actieve regel die past, wint.",
"back_tools": "Terug naar gereedschap",
"rules_heading": "Regels",
@@ -1683,7 +1684,7 @@
"move_down": "Omlaag",
"remove_rule": "Regel verwijderen",
"terms_label": "Termen of patronen",
- "terms_placeholder": "Eén per regel of komma-gescheiden. Deelstrings zijn hoofdletterongevoelig. Regex: één patroon per regel; ongeldige patronen worden bij opslaan verwijderd.",
+ "terms_placeholder": "Eén per regel of gescheiden door komma's. Zoekopdrachten zijn niet hoofdlettergevoelig. Je kunt ook reguliere expressies gebruiken (één per regel).",
"match_targets_label": "Matchen in",
"match_peer_fields": "Peer-weergavenaam, eigen naam, contactvelden",
"match_message": "Berichttitel en -inhoud (indien beschikbaar)",
@@ -1726,7 +1727,7 @@
"repository_server": {
"title": "Repositoryserver",
"description": "Distribueer MeshChatX- en Reticulum-gerelateerde Python wheels plus uw eigen bestanden opnieuw via plat HTTP zodat anderen op uw netwerk of op dit apparaat ze kunnen downloaden.",
- "subtitle": "Met internet: vernieuw de meegeleverde wheels; voeg op elk moment bestanden toe; start een kleine downloadpagina vanuit de app of gebruik de aparte HTTP-hulp.",
+ "subtitle": "Vernieuw de meegeleverde softwarepakketten, voeg je eigen bestanden toe of start een downloadpagina voor andere apparaten.",
"back_tools": "Back to tools",
"http_heading": "Plain HTTP mirror",
"host_label": "Listen address",
@@ -1920,14 +1921,14 @@
"serial": {
"title": "USB serial is unavailable",
"polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
- "android_webview_no_serial": "Android WebView does not expose Web Serial; use the desktop browser or wait for the bundled flasher.",
+ "android_webview_no_serial": "Android ondersteunt Web Serial niet in deze weergave. Gebruik een desktopbrowser of de ingebouwde flasher.",
"browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
"android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
"unknown": "USB serial cannot be initialised in this environment."
},
"bluetooth": {
"title": "Bluetooth is unavailable",
- "android_bridge_not_implemented": "Web Bluetooth is unavailable in this WebView; use Bluetooth from the OS or a different browser.",
+ "android_bridge_not_implemented": "Web Bluetooth is niet beschikbaar hier. Gebruik de Bluetooth-instellingen van het systeem of een andere browser.",
"browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
"insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
"requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
@@ -2114,7 +2115,7 @@
"heard_title_short": "RNGit · {prefix}",
"unnamed_node": "RNGit-knoop",
"hops_label": "Hops: {n}",
- "intro": "RNGit heeft geen wereldwijde index: plak kandidaat-reponamen (één per regel). MeshChatX probeert per naam een externe ref-lijst; bereikbare repos tonen een git clone-regel om te kopiëren. De app host of haalt geen git-gegevens op.",
+ "intro": "Plak repository-namen (één per regel) om ze op het netwerk te vinden. Bereikbare repo's tonen een clone-opdracht die je kunt kopiëren. Deze app slaat geen git-gegevens op.",
"destination_hash": "RNGit-bestemmingshash (32 hex)",
"group_name": "Groep (rngit-configuratie)",
"repo_names_label": "Te proberen reponamen",
@@ -2134,7 +2135,7 @@
"copy_failed": "Kopiëren mislukt",
"refs_preview": "Refs (voorbeeld)",
"truncated": "(ingekort)",
- "no_clone_hint": "Geen clone-regel voor onbereikbare namen; controleer toegang of spelling op de rngit-server.",
+ "no_clone_hint": "Geen clone-opdracht beschikbaar voor onbereikbare namen. Controleer de spelling of je verbinding.",
"experimental_footer": "Experimenteel: RNGit-hulpmiddelen kunnen zonder waarschuwing veranderen."
},
"rnprobe": {
@@ -2636,9 +2637,9 @@
"action_falling_skies": "Vallende luchten",
"action_falling_skies_desc": "Nieuwe grafieknodes uit de top van de visualiser gooien",
"action_snake": "Maasslang",
- "action_snake_desc": "Eet elke knoop; je staart is de knopen die je verzamelt",
+ "action_snake_desc": "Eet elke knoop. Je staart groeit met elke verzamelde knoop.",
"action_pong": "Mesh Pong",
- "action_pong_desc": "Je vs AI; score aan de top",
+ "action_pong_desc": "Jij tegen de AI. De score wordt bovenaan getoond.",
"action_getting_started": "Starten",
"action_getting_started_desc": "De setup-handleiding openen",
"action_changelog": "Changelog",

diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index 49e615f2..305ae875 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -48,7 +48,7 @@
"view_process_log": "Лог процесса (отладка)",
"process_log_title": "Лог процесса бота",
"process_log_empty": "Для этого бота пока нет вывода в лог.",
- "process_log_truncated": "Показан только конец лог-файла; файл на диске больше.",
+ "process_log_truncated": "Показан только конец лог-файла. Полный файл на диске больше.",
"process_log_loading": "Загрузка лога…",
"process_log_failed": "Не удалось загрузить лог процесса",
"process_log_copied": "Лог скопирован в буфер обмена",
@@ -105,9 +105,9 @@
"messages_sidebar_position_left": "Слева",
"messages_sidebar_position_right": "Справа",
"ui_transparency": "Прозрачность фона",
- "ui_transparency_description": "Усиливает просвечивание основного фона. Боковые панели остаются непрозрачными.",
+ "ui_transparency_description": "Увеличивает прозрачность основного фона. Боковые панели остаются непрозрачными для удобства чтения.",
"ui_glass_enabled": "Эффект стекла",
- "ui_glass_enabled_description": "Матовое размытие для «стеклянных» карточек. Выкл. — сплошные поверхности.",
+ "ui_glass_enabled_description": "Добавляет эффект матового стекла к карточкам. Если выключено, карточки используют сплошные цвета.",
"reset_appearance_defaults": "Сбросить оформление к умолчаниям",
"light_theme": "Светлая тема",
"dark_theme": "Темная тема",
@@ -119,12 +119,12 @@
"transport_toggle_description": "Маршрутизировать анонсы, отвечать на запросы путей и помогать вашей сети оставаться онлайн.",
"requires_restart": "Требуется перезапуск после переключения.",
"show_community_interfaces": "Показывать интерфейсы сообщества",
- "community_interfaces_description": "Показывать предустановки, поддерживаемые сообществом, при добавлении новых интерфейсов.",
+ "community_interfaces_description": "Показывать пресеты, поддерживаемые сообществом, при добавлении новых интерфейсов.",
"reliability": "Надежность",
"lxmf_settings_eyebrow": "LXMF",
"privacy_eyebrow": "Конфиденциальность",
"privacy_data_title": "Данные и устройство",
- "privacy_data_description": "Локальная история, телеметрия доверенным узлам. Удаление касается только этого устройства.",
+ "privacy_data_description": "Управляйте локальной историей сообщений, телеметрией и другими параметрами конфиденциальности. Удаление здесь влияет только на это устройство.",
"privacy_data": "Данные и устройство",
"privacy_subsection_device": "Это устройство",
"privacy_subsection_telemetry": "Телеметрия mesh",
@@ -137,11 +137,11 @@
"auto_fallback_title": "Автопереключение на узел ретрансляции",
"auto_fallback_description": "Неудачные прямые доставки будут поставлены в очередь на ваш предпочтительный узел ретрансляции.",
"inbound_stamps_required_title": "Требовать входящие штампы",
- "inbound_stamps_required_description": "Если выключено, прямые LXMF-сообщения к вам не требуют штампов Proof-of-Work. Если включено, задайте стоимость ниже (выше — больше работы для отправителей).",
+ "inbound_stamps_required_description": "Если выключено, прямые сообщения вам не требуют марок proof-of-work. Если включено, установите стоимость марки ниже. Более высокие значения означают больше работы для отправителей.",
"inbound_stamp_cost": "Стоимость входящего штампа",
- "inbound_stamp_description": "Сложность Proof-of-Work для прямой доставки, когда входящие штампы включены. Диапазон: 1-254. По умолчанию: 8.",
+ "inbound_stamp_description": "Сложность proof-of-work для прямых сообщений. Диапазон: 1-254. По умолчанию: 8.",
"local_message_auto_delete_title": "Удалять старые сообщения на этом устройстве",
- "local_message_auto_delete_description": "Удаляет сообщения из локальной базы после заданного возраста. Только на этом устройстве. У других остаются свои копии. В сеть команда на удаление не отправляется.",
+ "local_message_auto_delete_description": "Удаляет сообщения из локальной базы данных по истечении заданного вами времени. Это влияет только на это устройство, и никакие данные не удаляются из сети.",
"local_message_auto_delete_age": "Удалять сообщения старше",
"local_message_auto_delete_unit_aria": "Единица времени хранения",
"local_message_auto_delete_unit_days": "дней",
@@ -175,7 +175,7 @@
"last_synced": "Последняя синхронизация {time} назад.",
"last_synced_never": "Последняя синхронизация: никогда.",
"propagation_stamp_cost": "Стоимость штампа узла ретрансляции",
- "propagation_stamp_description": "Требовать штампы Proof-of-Work для сообщений, передаваемых через ваш узел. Более высокие значения требуют больше вычислительной работы. Диапазон: 13-254. По умолчанию: 16. **Примечание:** изменение требует перезапуска приложения.",
+ "propagation_stamp_description": "Требовать марки proof-of-work для сообщений, отправляемых через ваш узел. Более высокие значения требуют больше работы. Диапазон: 13-254. По умолчанию: 16. **Примечание:** Изменение этого параметра требует перезагрузки.",
"language": "Язык",
"select_language": "Выберите предпочтительный язык.",
"tagline": "Универсальный клиент Reticulum",
@@ -219,9 +219,9 @@
"message_font_size": "Размер шрифта сообщений",
"message_icon_size": "Размер иконки",
"detailed_outbound_send_status": "Подробный статус исходящей отправки",
- "detailed_outbound_send_status_description": "Показывать поиск пути, спиннеры и технические подсказки при отправке. Если выключено — одна приглушённая галочка до эскалации через несколько секунд.",
+ "detailed_outbound_send_status_description": "Показывать подробный статус, такой как поиск пути и технические подсказки, во время отправки. Если выключено, отображается простая галочка.",
"message_timestamp_grouping": "Группировать время сообщений",
- "message_timestamp_grouping_description": "Если включено, чат показывает заголовки дат и группирует время на одном пузыре за серию. Если выключено, у каждого сообщения своя метка времени, заголовки дат скрыты.",
+ "message_timestamp_grouping_description": "Если включено, сообщения группируются по дате, а временные метки упрощаются. Если выключено, каждое сообщение показывает точное время.",
"community_interfaces": "Сообщества",
"preferred_node": "Предпочитаемый узел",
"local_node": "Локальный узел",
@@ -234,9 +234,9 @@
"stranger_protection": "Защита от незнакомцев",
"stranger_protection_description": "Управление обработкой сообщений и вложений от неизвестных узлов.",
"block_stranger_attachments": "Блокировать вложения от незнакомцев",
- "block_stranger_attachments_description": "Автоматически удалять файлы, изображения и аудиовложения от узлов, которых нет в ваших контактах. Текстовые сообщения доставляются.",
+ "block_stranger_attachments_description": "Автоматически удалять вложения файлов, изображений и аудио от людей, которых нет в ваших контактах. Текстовые сообщения по-прежнему доставляются.",
"block_all_from_strangers": "Блокировать всё от незнакомцев",
- "block_all_from_strangers_description": "Молча отклонять все сообщения, вложения и звонки от узлов, которых нет в ваших контактах. Ничего не доставляется и не сохраняется.",
+ "block_all_from_strangers_description": "Игнорировать все сообщения, вложения и вызовы от людей, которых нет в ваших контактах. Ничего не доставляется и не сохраняется.",
"show_unknown_contact_banner": "Показывать предупреждение для неизвестных контактов",
"show_unknown_contact_banner_description": "При включении вверху переписки с узлами, которых нет в контактах, показывается уведомление.",
"warn_on_stranger_links": "Предупреждать перед открытием ссылок от незнакомцев",
@@ -302,7 +302,7 @@
"announce_limits": "Лимиты объявлений",
"announce_limits_description": "Ограничение числа объявлений в базе по аспекту (удаляются самые старые) и сколько загружается за запрос API. Также лимит поиска и списка обнаруженных интерфейсов. Очистите поле и сохраните для значений по умолчанию.",
"announce_store_heading": "Сохранять входящие объявления",
- "announce_store_description": "Выкл.: принятые объявления этого типа не пишутся в базу. Касается только хранения, не сети и не ваших объявлений. Локальная NomadNet-страница остаётся в списке, даже если хранение NomadNet выключено.",
+ "announce_store_description": "Если выключено, принятые анонсы этого типа не сохраняются. Это влияет только на хранение и не останавливает сеть или ваши собственные анонсы. Ваш локальный узел NomadNet по-прежнему будет в списке.",
"announce_store_lxmf": "LXMF (lxmf.delivery)",
"announce_store_lxst": "LXST телефония (lxst.telephony)",
"announce_store_nomad": "Узлы NomadNet (nomadnetwork.node)",
@@ -511,7 +511,7 @@
"title": "Редактор стикеров",
"create_button": "Создать стикер",
"processing": "Обработка...",
- "canvas_hint": "Предпросмотр масштабируется; экспорт использует холст 512×512.",
+ "canvas_hint": "Предпросмотр масштабируется. Экспорт использует холст 512×512.",
"section_source": "Источник",
"choose_image": "Выбрать изображение",
"section_transform": "Трансформация",
@@ -920,7 +920,7 @@
"backbone_transport_identity_placeholder": "e53433e51cde34c42a3245ba3fe1ad69",
"backbone_transport_identity_hint": "Как в примерах удалённого backbone Reticulum только с remote и target_port. Указывайте хеш, если это задал оператор или каталог.",
"loopback_local_title": "Локальный / loopback",
- "loopback_local_body": "Reticulum внутри использует LocalClientInterface для shared instance; отдельной формы loopback как у TCP Client нет. Чтобы достучаться до другого RNS на этом хосте, используйте TCP Client на 127.0.0.1 и порт экземпляра или установите внешний модуль интерфейса (например MyInterface.py) в interfacepath.",
+ "loopback_local_body": "Reticulum использует общую инстанцию внутри. Чтобы связаться с другим процессом RNS на этом хосте, используйте TCP-клиент на 127.0.0.1 с портом инстанции или внешний модуль интерфейса.",
"loopback_local_docs_hint": "См. главу Interfaces о поддерживаемых типах.",
"loopback_local_docs_link": "Открыть встроенное руководство Reticulum",
"custom_external_intro": "Типы вроде WeaveInterface загружаются, если Reticulum находит подходящий файл модуля (TypeName.py) в interfacepath с interface_class (внешний загрузчик RNS). Поля JSON попадают в секцию interface в вашем конфиге.",
@@ -965,12 +965,12 @@
"discovered_no_config": "В этом анонсе не было готового к вставке блока конфигурации.",
"discovered_prefill_applied": "Поля предзаполнены из обнаруженного интерфейса.",
"rnode_ble_toggle": "Bluetooth LE (RNode UART)",
- "rnode_ble_hint": "Reticulum использует BLE через bleak на устройстве, где запущен MeshChatX. Сначала сопрягите или свяжите RNode в ОС. Только веб или удалённый интерфейс не подключит BLE к Reticulum; используйте Electron, Linux, macOS, Windows или приложение Android, где встроенный Python включает bleak. На Android действуют обычные сопряжение, поддержка оборудования и запросы разрешений ОС.",
+ "rnode_ble_hint": "Reticulum использует Bluetooth на этом устройстве. Сначала сопрягите RNode в настройках ОС. Требуется приложение для ПК или Android. На Android также нужно разрешить необходимые права доступа.",
"rnode_ble_peer_label": "Имя BLE или MAC",
"rnode_ble_peer_placeholder": "MyRNode или aa:bb:cc:dd:ee:ff",
"rnode_ble_peer_required": "Укажите объявленное имя или MAC-адрес RNode.",
"rnode_ip_host_label": "Имя хоста или IP-адрес",
- "rnode_tcp_port_fixed_hint": "Reticulum подключается к RNode по TCP 7633; укажите только имя хоста или IP (без :порт).",
+ "rnode_tcp_port_fixed_hint": "Reticulum использует порт 7633 на RNode. Введите только имя хоста или IP без порта.",
"rnode_tcp_host_required": "Укажите имя хоста или IP для RNode по TCP.",
"listen_ip_required": "Укажите IP для прослушивания.",
"kernel_iface_picker_title": "Интерфейсы на этом узле",
@@ -1115,7 +1115,7 @@
"export_region_oceania": "Oceania",
"vector_exchange_title": "GeoJSON / KML / KMZ",
"vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
- "vector_exchange_hint": "Imports support icons via mcx_icon_href, mcx_icon_data_url (data URIs), Mapbox simplestyle marker-color, and KML/KMZ IconStyle. KMZ packs KML with embedded images. Name, description, and extra properties import/export with GeoJSON and KML; select a drawing to see metadata above it.",
+ "vector_exchange_hint": "Импорт поддерживает иконки из различных форматов, включая GeoJSON и KML. Выберите рисунок, чтобы увидеть его метаданные.",
"vector_import_geojson": "Import GeoJSON",
"vector_import_kml": "Import KML",
"vector_import_kmz": "Import KMZ",
@@ -1261,7 +1261,7 @@
"raw_path_value_unknown": "Неизвестно",
"raw_path_finding_measure": "Поиск пути при отправке (исходящее)",
"raw_path_row_hash_rnpath": "Хэш строки таблицы путей (rnpath)",
- "raw_path_row_hash_rnpath_hint": "Тот же хэш назначения, который Reticulum использовал для маршрута; ищите в таблице путей rnpath.",
+ "raw_path_row_hash_rnpath_hint": "Хэш назначения, использованный Reticulum для этого маршрута. Его можно найти в таблице путей.",
"copy_message": "Копировать сообщение",
"message_copied": "Сообщение скопировано",
"failed_copy_message": "Не удалось скопировать сообщение",
@@ -1353,7 +1353,7 @@
"forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
"forward_verify_show": "Source and verification",
"forward_verify_hide": "Hide verification",
- "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_explanation": "Ссылки Paper LXMF работают только если доступно полное сообщение и оно вписывается в лимиты Paper. Цитаты могут быть подделаны.",
"forward_verify_loading": "Looking up verification URI…",
"forward_verify_open_uri": "Open verification URI",
"forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
@@ -1427,10 +1427,11 @@
"renderer_chip_micron_wasm": "Micron WASM",
"renderer_hint_micron_js": "micron-parser (JavaScript)",
"renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
- "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_hint_micron_wasm_pending": "Загружается быстрая версия или она недоступна. Используется стандартная версия.",
"renderer_popover_micron_wasm_powered": "На базе ",
"renderer_popover_micron_wasm_active_tail": " {version}. Рендерер WebAssembly.",
- "renderer_popover_micron_wasm_pending_tail": " {version} недоступен или ещё загружается; используется micron-parser (JavaScript).",
+ "renderer_popover_micron_wasm_pending_tail": " {version} загружается или недоступна. Используется стандартная версия.",
+ "renderer_switch_title": "Парсер",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
"renderer_chip_plaintext": "Text",
@@ -1522,7 +1523,7 @@
"licenses": {
"section_label": "Правовая информация",
"title": "Лицензии сторонних компонентов",
- "description": "Версии, авторы и SPDX или заявленные лицензии зависимостей во время работы. Данные берутся из установленной среды Python. Для фронтенда используется pnpm, если команда работает; иначе пакеты читаются из node_modules (например, если pnpm licenses падает на lockfile).",
+ "description": "Версии, авторы и SPDX или заявленные лицензии зависимостей во время работы. Данные берутся из установленной среды Python. Для фронтенда используется pnpm, если команда работает. Иначе пакеты читаются из node_modules (например, если pnpm licenses падает на lockfile).",
"short_description": "Версии, авторы и лицензии для бэкенда и фронтенда.",
"search_placeholder": "Поиск по пакетам, версиям, авторам, лицензиям...",
"generated_at": "Сформировано: {time}",
@@ -1561,7 +1562,7 @@
},
"rnpath": {
"title": "RNPath",
- "description": "Просмотр путей и очередей анонсов; запрос или сброс маршрутов.",
+ "description": "Просмотр путей и очередей анонсов. Запрос или сброс маршрутов.",
"failed_fetch": "Failed to fetch path data",
"path_dropped": "Path dropped",
"failed_drop": "Could not drop path",
@@ -1614,7 +1615,7 @@
"move_down": "Вниз",
"remove_rule": "Удалить правило",
"terms_label": "Термины или шаблоны",
- "terms_placeholder": "По одному в строке или через запятую. Подстроки без учёта регистра. Regex: один шаблон на строку; неверные шаблоны удаляются при сохранении.",
+ "terms_placeholder": "По одному в строке или через запятую. Поиск не чувствителен к регистру. Также можно использовать регулярные выражения (по одному в строке).",
"match_targets_label": "Где искать",
"match_peer_fields": "Отображаемое имя пира, своё имя, поля контакта",
"match_message": "Заголовок и тело сообщения (если есть)",
@@ -1657,7 +1658,7 @@
"repository_server": {
"title": "Сервер репозитория",
"description": "Повторно распространяйте Python-колёса MeshChatX и экосистемы Reticulum плюс свои файлы по обычному HTTP, чтобы другие в сети или на этом устройстве могли их скачать.",
- "subtitle": "При наличии сети обновите поставляемый набор колёс; добавляйте файлы; откройте небольшую страницу загрузки в приложении или используйте отдельный HTTP-сервер.",
+ "subtitle": "Обновите встроенные пакеты ПО, добавьте свои файлы или запустите страницу загрузки для других устройств.",
"back_tools": "Back to tools",
"http_heading": "Plain HTTP mirror",
"host_label": "Listen address",
@@ -1851,14 +1852,14 @@
"serial": {
"title": "USB serial is unavailable",
"polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
- "android_webview_no_serial": "Android WebView does not expose Web Serial; use the desktop browser or wait for the bundled flasher.",
+ "android_webview_no_serial": "Android не поддерживает Web Serial в этом режиме. Используйте браузер на ПК или встроенный прошивальщик.",
"browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
"android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
"unknown": "USB serial cannot be initialised in this environment."
},
"bluetooth": {
"title": "Bluetooth is unavailable",
- "android_bridge_not_implemented": "Web Bluetooth is unavailable in this WebView; use Bluetooth from the OS or a different browser.",
+ "android_bridge_not_implemented": "Web Bluetooth здесь недоступен. Используйте настройки Bluetooth в ОС или другой браузер.",
"browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
"insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
"requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
@@ -2045,7 +2046,7 @@
"heard_title_short": "RNGit · {prefix}",
"unnamed_node": "Узел RNGit",
"hops_label": "Прыжков: {n}",
- "intro": "У RNGit нет глобального индекса: вставьте кандидаты имён репозиториев (по одному в строке). MeshChatX запрашивает удалённый список ссылок для каждого; для доступных репозиториев показывается строка git clone для копирования. Приложение не хранит и не загружает данные git.",
+ "intro": "Вставьте имена репозиториев (по одному в строке), чтобы найти их в сети. Для доступных репозиториев появится команда clone. Это приложение не хранит данные git.",
"destination_hash": "Хеш назначения RNGit (32 hex)",
"group_name": "Группа (конфиг rngit)",
"repo_names_label": "Имена репозиториев для проверки",
@@ -2065,7 +2066,7 @@
"copy_failed": "Не удалось скопировать",
"refs_preview": "Ссылки (фрагмент)",
"truncated": "(усечено)",
- "no_clone_hint": "Нет строки clone для недоступных имён; проверьте доступ или написание на сервере rngit.",
+ "no_clone_hint": "Команда clone недоступна для недостижимых имен. Проверьте имя или подключение.",
"experimental_footer": "Экспериментально: инструменты RNGit могут меняться без предупреждения."
},
"rnprobe": {
@@ -2515,9 +2516,9 @@
"action_falling_skies": "Falling Skies",
"action_falling_skies_desc": "Новые узлы падают сверху в визуализаторе",
"action_snake": "Mesh Snake",
- "action_snake_desc": "Съешьте все узлы; хвост из собранных узлов",
+ "action_snake_desc": "Съешьте все узлы. Ваш хвост растет с каждым собранным узлом.",
"action_pong": "Mesh Pong",
- "action_pong_desc": "Вы против ИИ; счёт сверху",
+ "action_pong_desc": "Вы против ИИ. Счет отображается сверху.",
"action_getting_started": "Начало работы",
"action_getting_started_desc": "Открыть мастер настройки",
"action_changelog": "Список изменений",
@@ -2542,7 +2543,7 @@
"nomad_micron_wasm_title": "Micron (WASM)",
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
- "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
+ "nomad_micron_wasm_desc_after_link": ") для страниц Nomad Network. Если выключено или не поддерживается, используется стандартная версия."
},
"debug": {
"title": "Журнал отладки",

diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json
index 455ea7e0..cc400a5f 100644
--- a/meshchatx/src/frontend/locales/zh.json
+++ b/meshchatx/src/frontend/locales/zh.json
@@ -48,7 +48,7 @@
"view_process_log": "进程日志(调试)",
"process_log_title": "机器人进程日志",
"process_log_empty": "此机器人尚无日志输出。",
- "process_log_truncated": "仅显示日志末尾;磁盘上的文件更大。",
+ "process_log_truncated": "仅显示日志末尾。磁盘上的完整文件更大。",
"process_log_loading": "正在加载日志…",
"process_log_failed": "无法加载进程日志",
"process_log_copied": "日志已复制到剪贴板",
@@ -111,9 +111,9 @@
"messages_sidebar_position_left": "左侧",
"messages_sidebar_position_right": "右侧",
"ui_transparency": "背景透明度",
- "ui_transparency_description": "增加主界面背景的透明度。侧边栏保持实心以确保可读性。",
+ "ui_transparency_description": "增加主背景的透明度。侧面板保持不透明以保证可读性。",
"ui_glass_enabled": "玻璃效果",
- "ui_glass_enabled_description": "玻璃风格卡片的磨砂模糊效果。关闭后,卡片将使用实心表面。",
+ "ui_glass_enabled_description": "为卡片添加磨砂模糊效果。关闭时,卡片使用实心颜色。",
"reset_appearance_defaults": "重置外观为默认",
"light_theme": "浅色主题",
"dark_theme": "深色主题",
@@ -130,7 +130,7 @@
"lxmf_settings_eyebrow": "LXMF",
"privacy_eyebrow": "隐私",
"privacy_data_title": "数据与本机",
- "privacy_data_description": "本机消息记录、对信任节点的遥测。在此删除仅影响本机。",
+ "privacy_data_description": "管理本地消息历史、遥测和其他隐私选项。在此处删除仅影响此设备。",
"privacy_data": "数据与本机",
"privacy_subsection_device": "本机",
"privacy_subsection_telemetry": "Mesh 遥测",
@@ -143,11 +143,11 @@
"auto_fallback_title": "自动回退到传播节点",
"auto_fallback_description": "失败的消息会排队到您首选的传播节点。",
"inbound_stamps_required_title": "需要入站邮戳",
- "inbound_stamps_required_description": "关闭时,直接发送给您的 LXMF 消息不需要工作证明邮戳。开启后,在下面设置邮戳成本(越高意味着发送者需要做更多工作)。",
+ "inbound_stamps_required_description": "关闭时,发给您的直接消息不需要 proof-of-work 邮票。开启时,请在下方设置邮票成本。值越高,发送者需要做的工作越多。",
"inbound_stamp_cost": "入站消息邮戳成本",
- "inbound_stamp_description": "需要入站邮戳时,直接发送消息的工作证明难度。范围:1-254。默认:8。",
+ "inbound_stamp_description": "直接消息的 proof-of-work 难度。范围:1-254。默认值:8。",
"local_message_auto_delete_title": "在此设备上删除旧消息",
- "local_message_auto_delete_description": "按设定时间从本地数据库删除消息。仅影响本机,他人仍保留各自副本。不会向网络发送删除指令。",
+ "local_message_auto_delete_description": "在您设置的时间后从本地数据库中删除消息。这仅影响此设备,不会从网络中删除任何数据。",
"local_message_auto_delete_age": "删除早于以下时间的消息",
"local_message_auto_delete_unit_aria": "保留期限的时间单位",
"local_message_auto_delete_unit_days": "天",
@@ -181,7 +181,7 @@
"last_synced": "上次同步于 {time} 前。",
"last_synced_never": "上次同步:从未。",
"propagation_stamp_cost": "传播节点邮戳成本",
- "propagation_stamp_description": "通过节点传播的消息需要工作证明邮戳。较高的值需要更多的计算工作。范围:13-254;默认:16。**注意:**更改此项需要重新启动应用程序。",
+ "propagation_stamp_description": "要求通过您的节点发送的消息具有 proof-of-work 邮票。值越高需要的工作越多。范围:13-254。默认值:16。**注意:** 更改此设置需要重启。",
"language": "语言",
"select_language": "选择您的首选语言。",
"tagline": "全能 Reticulum 客户端",
@@ -222,9 +222,9 @@
"message_font_size": "消息字体大小",
"message_icon_size": "图标大小",
"detailed_outbound_send_status": "详细发送状态",
- "detailed_outbound_send_status_description": "在消息发送时显示路径查找样式、旋转器和技术提示。关闭时,会显示单个静音勾选,直到发送需要几秒钟。",
+ "detailed_outbound_send_status_description": "在发送时显示详细状态,如路径查找和技术提示。关闭时,显示一个简单的复选标记。",
"message_timestamp_grouping": "分组消息时间戳",
- "message_timestamp_grouping_description": "开启时显示日期标题并在每条连续消息组只在末尾气泡显示时间。关闭时每条消息都显示时间并隐藏日期气泡。",
+ "message_timestamp_grouping_description": "开启时,消息按日期分组,时间戳简化。关闭时,每条消息显示其准确时间。",
"search_settings": "搜索设置...",
"auto_resend": "自动重发",
"retry_attachments": "重试附件",
@@ -241,9 +241,9 @@
"stranger_protection": "陌生人保护",
"stranger_protection_description": "控制应用程序如何处理来自未知端点的消息和附件。",
"block_stranger_attachments": "阻止陌生人附件",
- "block_stranger_attachments_description": "自动删除来自不在您联系人中的端点的文件、图像和音频附件。文本消息仍会送达。",
+ "block_stranger_attachments_description": "自动删除不在您联系人列表中的人的文件、图像和音频附件。文本消息仍会送达。",
"block_all_from_strangers": "阻止陌生人的一切",
- "block_all_from_strangers_description": "静默丢弃来自不在您联系人中的端点的所有消息、附件和来电。不会送达或存储任何内容。",
+ "block_all_from_strangers_description": "忽略不在您联系人列表中的人的所有消息、附件和来电。不会送达或保存任何内容。",
"show_unknown_contact_banner": "显示未知联系人横幅",
"show_unknown_contact_banner_description": "启用时,会在与不在您联系人中的端点的对话顶部显示通知。",
"warn_on_stranger_links": "打开陌生人链接前警告",
@@ -309,7 +309,7 @@
"announce_limits": "广播限制",
"announce_limits_description": "限制每个方面在数据库中保存的广播数量(最旧的最先被删除),以及每个 API 请求的载荷大小。还限制搜索和发现接口的载荷。清除数字字段并保存以恢复默认值。",
"announce_store_heading": "保存传入广播",
- "announce_store_description": "关闭时,该类型的已接收广播不写入数据库。只影响存储,不影响网络或您自己发出的广播。本机托管的 NomadNet 页节点在关闭 NomadNet 存储时仍会在列表中。",
+ "announce_store_description": "关闭时,该类型的已接收广播不保存。这只影响存储,不影响网络或您自己发出的广播。您的本地 NomadNet 节点仍会列出。",
"announce_store_lxmf": "LXMF (lxmf.delivery)",
"announce_store_lxst": "LXST 电话 (lxst.telephony)",
"announce_store_nomad": "NomadNet 节点 (nomadnetwork.node)",
@@ -511,7 +511,7 @@
"title": "贴纸编辑器",
"create_button": "创建贴纸",
"processing": "正在处理...",
- "canvas_hint": "预览已缩放以适应;导出时使用 512×512 画布。",
+ "canvas_hint": "预览已缩放。导出时使用 512×512 画布。",
"section_source": "来源",
"choose_image": "选择图像",
"section_transform": "变换",
@@ -868,7 +868,7 @@
"backbone_transport_identity_placeholder": "e53433e51cde34c42a3245ba3fe1ad69",
"backbone_transport_identity_hint": "与 Reticulum 骨干远端示例一致,仅需 remote 与 target_port。运营商或目录注明时再填写哈希。",
"loopback_local_title": "本地 / 环回",
- "loopback_local_body": "Reticulum 在内部通过 LocalClientInterface 连接共享实例;没有像 TCP 客户端那样的单独环回表单。若要访问本机上的其他 RNS 进程,请使用 TCP 客户端连接 127.0.0.1 与实例端口,或在 interfacepath 下安装外部接口模块(例如 MyInterface.py)。",
+ "loopback_local_body": "Reticulum 在内部使用共享实例。若要与本机上的其他 RNS 进程通信,请使用 TCP 客户端连接 127.0.0.1 及实例端口,或使用外部接口模块。",
"loopback_local_docs_hint": "参阅 Interfaces 章节了解支持的类型。",
"loopback_local_docs_link": "打开内置 Reticulum 手册",
"custom_external_intro": "WeaveInterface 等类型会在 Reticulum 于 interfacepath 找到匹配的模块文件(TypeName.py)且包含 interface_class 时加载(RNS 外部加载器)。JSON 选项会合并到配置文件中的 interface 段。",
@@ -913,12 +913,12 @@
"discovered_no_config": "此公告未包含可直接粘贴的配置块。",
"discovered_prefill_applied": "已根据发现的接口预填字段。",
"rnode_ble_toggle": "蓝牙低功耗 (RNode UART)",
- "rnode_ble_hint": "Reticulum 通过 bleak 在运行 MeshChatX 的设备上使用 BLE。请先在系统中配对或绑定 RNode。纯网页或远程界面无法将 BLE 交给 Reticulum;请使用内置 Python 且包含 bleak 的 Electron、Linux、macOS、Windows 或 Android 应用。在 Android 上仍需遵循系统常规的配对、硬件支持与权限提示。",
+ "rnode_ble_hint": "Reticulum 在此设备上使用蓝牙。请先在系统设置中配对 RNode。这需要桌面版或 Android 应用。在 Android 上,您还必须允许所需的权限。",
"rnode_ble_peer_label": "BLE 名称或 MAC",
"rnode_ble_peer_placeholder": "MyRNode 或 aa:bb:cc:dd:ee:ff",
"rnode_ble_peer_required": "请输入 RNode 的广播名称或 MAC 地址。",
"rnode_ip_host_label": "主机名或 IP 地址",
- "rnode_tcp_port_fixed_hint": "Reticulum 使用 TCP 7633 连接 RNode;只需填写主机名或 IP,不要加 :端口。",
+ "rnode_tcp_port_fixed_hint": "Reticulum 使用 RNode 上的 7633 端口。只需填写主机名或 IP,不要加端口号。",
"rnode_tcp_host_required": "请填写 RNode TCP 连接的主机名或 IP。",
"listen_ip_required": "Listen IP 为必填项。",
"kernel_iface_picker_title": "本机网络接口",
@@ -1063,7 +1063,7 @@
"export_region_oceania": "Oceania",
"vector_exchange_title": "GeoJSON / KML / KMZ",
"vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
- "vector_exchange_hint": "Imports support icons via mcx_icon_href, mcx_icon_data_url (data URIs), Mapbox simplestyle marker-color, and KML/KMZ IconStyle. KMZ packs KML with embedded images. Name, description, and extra properties import/export with GeoJSON and KML; select a drawing to see metadata above it.",
+ "vector_exchange_hint": "导入支持多种格式的图标,包括 GeoJSON 和 KML。选择一个绘图以查看其元数据。",
"vector_import_geojson": "Import GeoJSON",
"vector_import_kml": "Import KML",
"vector_import_kmz": "Import KMZ",
@@ -1207,7 +1207,7 @@
"raw_path_value_unknown": "未知",
"raw_path_finding_measure": "发送时的路径查找(出站)",
"raw_path_row_hash_rnpath": "路径表哈希(rnpath)",
- "raw_path_row_hash_rnpath_hint": "与 Reticulum 此路由使用的目标哈希相同;可在 rnpath 路径表中搜索。",
+ "raw_path_row_hash_rnpath_hint": "Reticulum 此路由使用的目标哈希。您可以在路径表中找到它。",
"copy_message": "复制消息",
"message_copied": "消息已复制",
"failed_copy_message": "无法复制消息",
@@ -1301,7 +1301,7 @@
"forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
"forward_verify_show": "Source and verification",
"forward_verify_hide": "Hide verification",
- "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_explanation": "Paper LXMF 链接仅在完整消息可用且符合 Paper 限制时有效。引用的片段可能被伪造。",
"forward_verify_loading": "Looking up verification URI…",
"forward_verify_open_uri": "Open verification URI",
"forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
@@ -1496,10 +1496,11 @@
"renderer_chip_micron_wasm": "Micron WASM",
"renderer_hint_micron_js": "micron-parser (JavaScript)",
"renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
- "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_hint_micron_wasm_pending": "正在加载快速版本或不可用。正在使用标准版本。",
"renderer_popover_micron_wasm_powered": "由 ",
"renderer_popover_micron_wasm_active_tail": " {version} 驱动。WebAssembly 渲染。",
- "renderer_popover_micron_wasm_pending_tail": " {version} 不可用或仍在加载;使用 micron-parser(JavaScript)。",
+ "renderer_popover_micron_wasm_pending_tail": " {version} 正在加载或不可用。正在使用标准版本。",
+ "renderer_switch_title": "解析器",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
"renderer_chip_plaintext": "Text",
@@ -1683,7 +1684,7 @@
"move_down": "下移",
"remove_rule": "删除规则",
"terms_label": "词或模式",
- "terms_placeholder": "每行一个或用逗号分隔。子串不区分大小写。正则每行一条;无效模式在保存时移除。",
+ "terms_placeholder": "每行一个或用逗号分隔。搜索不区分大小写。您也可以使用正则表达式(每行一个)。",
"match_targets_label": "匹配范围",
"match_peer_fields": "对等方显示名、自定义名、联系人字段",
"match_message": "消息标题与正文(若有)",
@@ -1726,7 +1727,7 @@
"repository_server": {
"title": "软件仓库服务器",
"description": "通过明文 HTTP 重新分发 MeshChatX 与 Reticulum 相关 Python 安装包,以及您自己的文件,供局域网或本机下载。",
- "subtitle": "联网时可刷新内置安装包集合;随时添加文件;在应用内打开小型下载页或单独的 HTTP 服务。",
+ "subtitle": "刷新内置的软件包,添加您自己的文件,或为其他设备启动下载页面。",
"back_tools": "Back to tools",
"http_heading": "Plain HTTP mirror",
"host_label": "Listen address",
@@ -1920,14 +1921,14 @@
"serial": {
"title": "USB serial is unavailable",
"polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
- "android_webview_no_serial": "Android WebView does not expose Web Serial; use the desktop browser or wait for the bundled flasher.",
+ "android_webview_no_serial": "Android 在此视图中不支持 Web Serial。请使用桌面浏览器或内置刷机工具。",
"browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
"android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
"unknown": "USB serial cannot be initialised in this environment."
},
"bluetooth": {
"title": "Bluetooth is unavailable",
- "android_bridge_not_implemented": "Web Bluetooth is unavailable in this WebView; use Bluetooth from the OS or a different browser.",
+ "android_bridge_not_implemented": "此处的 Web 蓝牙不可用。请使用系统蓝牙设置或不同的浏览器。",
"browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
"insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
"requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
@@ -2114,7 +2115,7 @@
"heard_title_short": "RNGit · {prefix}",
"unnamed_node": "RNGit 节点",
"hops_label": "跳数:{n}",
- "intro": "RNGit 没有全局索引:请粘贴候选仓库名(每行一个)。MeshChatX 会尝试每个名称的远程引用列表;可达的仓库会显示可复制的一行 git clone。应用内不托管或拉取 git 数据。",
+ "intro": "粘贴仓库名称(每行一个)以在网络上查找。可达的仓库将显示可复制的克隆命令。此应用不存储任何 git 数据。",
"destination_hash": "RNGit 目标哈希(32 位十六进制)",
"group_name": "组(rngit 配置)",
"repo_names_label": "要尝试的仓库名",
@@ -2134,7 +2135,7 @@
"copy_failed": "无法复制",
"refs_preview": "引用(预览)",
"truncated": "(已截断)",
- "no_clone_hint": "不可达名称没有 clone 行;请在 rngit 服务器上修正访问或拼写。",
+ "no_clone_hint": "不可达名称没有克隆命令。请检查拼写或您的连接。",
"experimental_footer": "实验性功能:RNGit 工具可能会在不事先通知的情况下变更。"
},
"rnprobe": {
@@ -2636,9 +2637,9 @@
"action_falling_skies": "坠落天空",
"action_falling_skies_desc": "从可视化工具上方丢落新图节点",
"action_snake": "网格贪吃蛇",
- "action_snake_desc": "吃掉每个节点;您的尾巴是已收集的节点",
+ "action_snake_desc": "吃掉每个节点。您的尾巴会随着收集的每个节点而增长。",
"action_pong": "乒乓",
- "action_pong_desc": "您对 AI;先得最高分者胜",
+ "action_pong_desc": "您对 AI。分数显示在顶部。",
"action_getting_started": "开始使用",
"action_getting_started_desc": "打开设置指南",
"action_changelog": "更新日志",


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────